[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 404

 
splxgf:
Лучше все же первый вариант, размещать перед попыткой открытия ордера (OrderSend)
Огромное спасибо! Все работает :)
 
kolyango:

Все эти условия могут не следовать сразу одно за другим (может через час или два или три), поэтому нужно сделать так, чтобы как только значение индикатора достигнет 1.0000, это условие больше не проверялось при каждом тике, а ждать пока закроется один бар падением, а после этого эти 2 условия не проверялись при каждом тике, а ждать пока значение индикатора станет меньше или равно 0.9980. Как только все условия будут выполнены открываем рыночный ордер на продажу 0.1 лота со стоп-лоссом 400п. и тейк-профитом 400п.

В целом все нормально, а вот на значения возвращаемые индикатором я бы обратил пристальное внимание.

bool Val_max=false, Cl_dn=false, Val_min=false; 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1 && Val_max==true) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 
splxgf:

В целом все нормально, а вот на значения возвращаемые индикатором я бы обратил пристальное внимание.


Пробовал в режиме реального времени через Алерт значение индикатора, сообщение выводилось нормально:

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max)
{
Alert("Значение индикатора >= 1.0000");
}
Когда значение достигало 1.0000, при каждом тике выводилось сообщение: "Значение индикатора >= 1.0000"
 
kolyango:


Пробовал в режиме реального времени через Алерт значение индикатора, сообщение выводилось нормально:

А что тогда тестеру не нравится, нужно добавить алертов и глянуть в журнал.
 
splxgf:
А что тогда тестеру не нравится, нужно добавить алертов и глянуть в журнал.

Ну а код правильный?
 

А это что означает?

2011.12.06 01:07:55 HMR MULTI Indicator EURUSD,M15: removed

2011.12.06 01:07:57 TestGenerator: unmatched data error (volume limit 603 at 2011.12.01 00:00 exceeded)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicator EURUSD,M15: unknown subwindow number -1 for ObjectCreate function


 
kolyango:

А это что означает?

2011.12.06 01:07:55 HMR MULTI Indicator EURUSD,M15: removed

2011.12.06 01:07:57 TestGenerator: unmatched data error (volume limit 603 at 2011.12.01 00:00 exceeded)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicator EURUSD,M15: unknown subwindow number -1 for ObjectCreate function


Похоже там две ошибки:
1. Возможно надо отключить МТ4 от Интернета, а затем импортировать исторические данные.
2. Необходимо проверять код.

 
chief2000:
Похоже там две ошибки:
1. Возможно надо отключить МТ4 от Интернета, а затем импортировать исторические данные.
2. Необходимо проверять код.

... индикатора.

 int start(){
  double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
  Alert(Val);
}

пробуйте методом "народного тыка" пустым советником,

проверьте в индикаторе чтобы ObjectCreate находило свое подокно (или зачем рисовать ЕСЛИ ТЕСТИРУЕМ ИЛИ ОПТИМИЗИРУЕМ)

if(IsTesting()||IsOptimization())флаг_Канады_не_рисовать_obj=true;          //проверяем надо ли рисовать (в ините ему место через статик переменную)
if(!флаг_Канады_не_рисовать_obj){                                           //запрет отрисовки объектов ели оптимизация или тестирование
ObjectCreate(........................);
}
 
granit77:
То есть, если без передачи параметров, то:

Спасибо за ответы !
 

Добрый день!

Подскажите как сделать, чтобы советник не записывал повторы в файл по параметру "Инструмент" (_OrderSymbol). На форуме видел, как удаляются повторы https://forum.mql4.com/ru/5814 в массиве, но как применить к моей ситуации не разобрался. А с повторами начинает даже в одном цикле штамповать по 200 одинаковых строк в файл.

void TimeStr6() { 
   int i,handle,_ordertype;
   double _openprice,_orderLots,_OrderProfit;
   string _orderspread,_orderbalance,_OrderSymbol,_orderOpenTime,_orderOpenTime1;
   string tekTime=TimeToStr(CurTime(),TIME_DATE)+"_";
   string path=tekTime+"Оптимальный.csv";
//---------------------------
    handle=FileOpen(path,FILE_READ|FILE_WRITE);
    if (handle>0){
       FileWrite(handle,"Дата","Время","Инструмент","Баланс оптимальный"); 
       _orderOpenTime=TimeToStr(OrderOpenTime(),TIME_DATE);
       _orderOpenTime1=TimeToStr(OrderOpenTime(),TIME_SECONDS);
       _OrderSymbol=SymbolMax[nnnn];
       _orderbalance=DoubleToStr(StartBalance,0);
       FileSeek(handle,0,SEEK_END);
       FileWrite(handle,_orderOpenTime,_orderOpenTime1,_OrderSymbol,_orderbalance);
       FileClose(handle);
     }
   return;
}

Причина обращения: