Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ




Лучшее от vic123



чудо! Комментариев 51
2016-10-01 08:35:13Рейтинг 0

С Новым Годом Вас ВСЕХ!!!!! Комментариев 4
2016-12-31 22:18:26Рейтинг 0

Нужна помощь
2021-08-03 09:58:14Рейтинг 0

Доработка советника Комментариев 2
2016-02-21 10:24:52Рейтинг 0

Модернизация советника Комментариев 19
2015-05-21 05:59:31Рейтинг 0

Добавить функцию в советник

Помогите, please!!!
Необходимо дописать в советник функцию записи в текстовый файл данных в следующей форме:
Дата время IND_1 IND_2 IND_3

1. Запись должна осуществляться при тестировании советника за весь период тестирования.
2. Запись должна осуществляться только при изменении любого из IND_N

Условия открытия ордеров будут сформированы после анализа файла.
Советник и индикатор прилагаю.
Терминал МТ4.

Суважением!!!
DIABLO_v.5.rar (57 Kb)
  • 0
  • Просмотров: 4059
  • 28 октября 2015, 12:00
  • vic123
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
ОСТАЛЬНЫЕ ИНДИКАТОРЫ
Следующая запись в группе  
прикрутить звуковой сигнал
28 октября 2015
28 октября 2015

Комментарии (19)

+
0
Что зашито в DLL?
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 28 октября 2015, 13:12
+
0
Не знаю. Эта DLL к индикатору Apollo.
avatar

  19  vic123 Автор Сообщений: 98

  • 28 октября 2015, 14:30
+
0
После недавнего случая не ставлю у себя чужие длл.
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 28 октября 2015, 14:40
+
0
В принципе, Вам ни индикатор, ни DLL не нужны. В тексте советника есть ссылка на этот индикатор.
IND_1 = NormalizeDouble(iCustom(NULL, 0, «Apollo», 0, 0)*1000,0);
IND_2 = NormalizeDouble(iCustom(NULL, 0, «Apollo», 1, 0)*1000,0);
IND_3 = NormalizeDouble(iCustom(NULL, 0, «Apollo», 3, 0)*1000,0);
и я думаю этого достаточно для того чтобы эти IND_N посылать в файл.
Вам даже не надо тестировать. Просто, если можно, добавьте в текст советника передачу данных в файл. Я перечитал кучу инфы, но у меня не получается.
Редактирован: 28 октября 2015, 17:17
avatar

  19  vic123 Автор Сообщений: 98

  • 28 октября 2015, 14:48
+
0
Вот функция, которая пишет результаты сделок в файл:


//+------------------------------------------------------------------+
void Log(string s="")
  {
//--- Открываем файл лога
   int fileHandle=FileOpen(FileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(FileSeek(fileHandle,FileSize(fileHandle),SEEK_SET))
   FileWrite(fileHandle,s);
   FileClose(fileHandle); // закрываем файл лога
  }
//+------------------------------------------------------------------+


Вызов функции:


Log(_Symbol+" "+TimeToString(TimeCurrent())+" "+"BUY "+" PRICE="+DoubleToString(NormalizeDouble(Ask,_Digits))+" SL="+DoubleToString(NormalizeDouble(stop,_Digits))+" TP="+DoubleToString(NormalizeDouble(take,_Digits)));


Завтра набросаю что нибудь простенькое, что пишет данные индикатора в файл
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 28 октября 2015, 23:02
+
0
Советник для примера. Данный код запишет данные индикатора в файл:


//+------------------------------------------------------------------+
//|                                                         ExBB.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "BBands expert advisor"

//--- Inputs
extern double Lots         = 0.1;  // лот
extern int    StopLoss     = 500;  // лось
extern int    TakeProfit   = 500;  // язь
extern int    Slip         = 30;   // слипаж
//----
extern int    Length       = 20;   // период BB 
extern double Deviation    = 2;    // отклонение ВВ
extern int    Magic        = 20;   // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Ind
   double BBBlue=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,0,1);
   double BBRed=iCustom(Symbol(),0,"BBands_Stop_v1",Length,Deviation,1,1);
   if(IsTesting()) Log(DoubleToString(NormalizeDouble(BBBlue,Digits)));
//--- sell conditions
   if(BBRed>0)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),
                    Slip,NormalizeDouble(Bid+StopLoss*Point,Digits),
                    NormalizeDouble(Bid-TakeProfit*Point,Digits),"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(BBBlue>0)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),
                    Slip,NormalizeDouble(Ask-StopLoss*Point,Digits),
                    NormalizeDouble(Ask+TakeProfit*Point,Digits),"",Magic,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Log(string s="")
  {
//--- Открываем файл лога
   int fileHandle=FileOpen("MyLog.csv",FILE_READ|FILE_WRITE|FILE_CSV);
   if(FileSeek(fileHandle,FileSize(fileHandle),SEEK_SET))
      FileWrite(fileHandle,s);
   FileClose(fileHandle); // закрываем файл лога
  }
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1) OpenPos();
  }
//+------------------------------------------------------------------+



1.11852000
1.12665000
-1.00000000
-1.00000000
-1.00000000
-1.00000000
1.12273000
1.12810000
1.12810000
1.13004000
1.13815000
-1.00000000
-1.00000000
-1.00000000
-1.00000000
1.11105000
1.11105000
1.11596000

Пишет в папку Tester/Files/
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 28 октября 2015, 23:39
+
0
Вроде разобрался. Файл получил. Но в файл данные запмсываются с каждым тиком, а мне хотелось бы существенно его сократить. Что бы данные записывались только при изменении любого из IND_N
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 10:36
+
0
IND_1 = NormalizeDouble(iCustom(NULL, 0, «Apollo», 0, 0)*1000,0);//прямая коричневая
IND_2 = NormalizeDouble(iCustom(NULL, 0, «Apollo», 1, 0)*1000,0);//прямая коричневая
IND_3 = iCustom(NULL, 0, «Apollo», 5, 0);

static int old_IND_1 = 23; // запомним число
if (old_IND_1 != IND_1) {
if(IsTesting()) Log();
else
return (0);
}
void Log(string s="")
{
//--- Открываем файл лога
int fileHandle=FileOpen(«MyLog.csv»,FILE_READ|FILE_WRITE|FILE_CSV);
if(FileSeek(fileHandle,FileSize(fileHandle),SEEK_SET))
int i;
FileWrite(fileHandle,TimeToStr(Time[i], TIME_DATE), TimeToStr(Time[i], TIME_SECONDS),
IND_1, IND_2, IND_3, Open[i]);
FileClose(fileHandle); // закрываем файл лога
}
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 10:39
+
0
Как это сделать?
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 10:59
+
0
Вот таким образом нормально пишет:


   if(StarBBBlue!=BBBlue)
     {
      if(IsTesting()) Log(DoubleToString(NormalizeDouble(BBBlue,Digits)));
      StarBBBlue=BBBlue;
     }


1.12602000
1.12602000
1.12679000
1.12770000
1.12770000
1.12868000
1.12976000
1.13111000
1.13320000
1.13320000
1.13351000
1.13438000
1.13505000
1.13507000
1.13507000
1.13523000
1.13523000
1.13539000
1.13545000
1.13545000
1.13545000
1.13546000
1.13546000
1.13550000
1.13550000
1.13572000
1.13572000
1.13589000
1.13589000
1.13604000
1.13604000
1.13605000
1.13605000
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 30 октября 2015, 15:58
+
0
1.12602000
1.12602000

1.12679000
1.12770000
1.12770000

1.12868000
1.12976000
1.13111000
1.13320000
1.13320000

1.13351000
1.13438000
1.13505000
1.13507000
1.13507000

1.13523000
1.13523000

1.13539000
1.13545000
1.13545000
1.13545000

1.13546000
1.13546000
1.13550000
1.13550000
1.13572000
1.13572000
1.13589000
1.13589000
1.13604000
1.13604000
1.13605000
1.13605000
Здесь тоже не совсем нормально. Цифры повторяются.
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 19:15
+
0
Здесь тоже не совсем нормально. Цифры повторяются.


Основа есть, остается немного поработать с отладчиком :) 
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 30 октября 2015, 20:28
+
0
Так получилось?

if (old_IND_1 != IND_1) { 
if(IsTesting()) Log();
else 
return (0); 
} 
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 30 октября 2015, 13:59
+
0
Завтра попробую.Сейчас по стояку сантехник ищет проблему.
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 16:57
+
0
if (old_IND_1 != IND_1) {
if(IsTesting()) Log();
else
return (0);
}
в том то и дело, что так не получается. Сам удивляюсь почему нет.
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 17:12
+
0
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
23.07.2015 0:00:00 391 -256 -1 1.56082
Cейчас получаю файл в таком виде
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 17:39
+
0
Даже с этой функцией?


if(StarBBBlue!=BBBlue)
     {
      if(IsTesting()) Log(DoubleToString(NormalizeDouble(BBBlue,Digits)));
      StarBBBlue=BBBlue;
     }
avatar

  34  AM2 Сообщений: 15886 - Андрей

  • 30 октября 2015, 17:41
+
0
Да
avatar

  19  vic123 Автор Сообщений: 98

  • 30 октября 2015, 18:30
+
0
03.08.2015 0:00:00 74 -58 1 1.56343
03.08.2015 1:00:00 64 -47 1 1.56241
03.08.2015 1:00:00 64 -47 -1 1.56241
03.08.2015 1:00:00 64 -47 1 1.56241
03.08.2015 1:00:00 64 -47 -1 1.56241
03.08.2015 1:00:00 64 -47 1 1.56241
03.08.2015 1:00:00 64 -47 -1 1.56241
Все получилось!!! Спасибо тебе Огромное!
avatar

  19  vic123 Автор Сообщений: 98

  • 31 октября 2015, 10:47

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари