Скачать MetaTrader 5

советник вылетает с графика

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
vas
94
vas  

создал советник, скомпилировал ошибок не показывает, цепляю к графику. цепляется. Но с первым тиком его сбрасывает с графика.

может без прикручивания кода к теме кто то догадывается почему это происходит?

Разработчики скорее всего догадываются. Может подсказку какую скажете?

o_o
Модератор
24123
o_o  

а что в журнале?
vas
94
vas  
sergeev:

а что в журнале?

Прикрутил: loaded successfuly

прошел тик:

removed

И все слетел

o_o
Модератор
24123
o_o  

а причина - 0 ?
vas
94
vas  


sergeev:

а причина - 0 ?
без причины
o_o
Модератор
24123
o_o  

что дает запуск на дебаге?
vas
94
vas  
sergeev:

что дает запуск на дебаге?

вот такую фигню см. прикрученный файл

//--- объявляем переменные типа boolean, они будут использоваться при проверке условий для продажи
   bool Sell_Condition_1 = (ma2Val[1]<ma2Val[2]) && (ma2Val[2]<ma2Val[3]);  // iMA  падает
   bool Sell_Condition_2 = (ma4Val[1]>ma4Val[2]) && (ma4Val[2]>ma4Val[3]);  // iMA  отката растет
   bool Sell_Condition_3 = (p_close <ma4Val[1]);                         // предыдущая цена закрытия ниже MA

//--- собираем все вместе
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3)
        {
         // есть ли в данный момент открытая позиция на продажу?
         if(Sell_opened)
           {
            Alert("Уже есть позиция на продажу!!!");
            return;    // не добавлять к открытой позиции на продажу
           }
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.bid + STP*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.magic = EA_Magic;                                            // Magic Number
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_AON;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("Ордер Sell успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Sell не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
     }
   return;
  }

вот из за этого куска капризничает. Что же я там напортачил?

Файлы:
1__1.png 10 kb
o_o
Модератор
24123
o_o  

пишет, что обращение к массиву вне его диапазона. то бишь у вас массивы не той длины. или вообще нулевой.

проверьте их инициализацию.

один из этих

   bool Sell_Condition_1 = (ma2Val[1]<ma2Val[2]) && (ma2Val[2]<ma2Val[3]);  // iMA  падает
   bool Sell_Condition_2 = (ma4Val[1]>ma4Val[2]) && (ma4Val[2]>ma4Val[3]);  // iMA  отката растет
   bool Sell_Condition_3 = (p_close <ma4Val[1]);

vas
94
vas  
sergeev:

пишет, что обращение к массиву вне его диапазона. то бишь у вас массивы не той длины. или вообще нулевой.

проверьте их инициализацию.

один из этих

   bool Sell_Condition_1 = (ma2Val[1]<ma2Val[2]) && (ma2Val[2]<ma2Val[3]);  // iMA  падает
   bool Sell_Condition_2 = (ma4Val[1]>ma4Val[2]) && (ma4Val[2]>ma4Val[3]);  // iMA  отката растет
   bool Sell_Condition_3 = (p_close <ma4Val[1]);

Заработала эта сковорода 

после того как динамические массивы сделал статическими

double maVal[4]; // динамический массив для хранения значений индикатора iMA

double ma1Val[4]; // динамический массив для хранения значений индикатора iMA

double ma2Val[4]; // динамический массив для хранения значений индикатора iMA

double ma3Val[4]; // динамический массив для хранения значений индикатора iMA

double ma4Val[4]; // динамический массив для хранения значений индикатора iMA


А сколько может быть динамических массивов?


o_o
Модератор
24123
o_o  

думаю, сколько память позволит.

только вот такое описание int a[]

и последующее к нему обращение a[3] - не обозначает, что он автоматически должен увеличить число своих элементов.

это надо делать принудительно. ArrayResize


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