Не знаю как решить ошибку - страница 4

 
Здравствуйте! Создал несколько терминалов на одном компьютере. В каждом терминале включен советник. Проблема: почему-то в некоторых терминал работает советник, а в некоторых нет. Кто знает почему и как это решить?
 
tt07 #:
Здравствуйте! Создал несколько терминалов на одном компьютере. В каждом терминале включен советник. Проблема: почему-то в некоторых терминал работает советник, а в некоторых нет. Кто знает почему и как это решить?

Торговля включена или нет советником на всех терминалах, журнал посмотреть, там тоже что нить написано. Цены так же, спреды разные могут быть и условия открытия ордеров не соблюдаться.

 
Valeriy Yastremskiy #:

Торговля включена или нет советником на всех терминалах, журнал посмотреть, там тоже что нить написано. Цены так же, спреды разные могут быть и условия открытия ордеров не соблюдаться.

дело в том что на всех терминал одни и те же настройки, везде автоматическая торговля включена, но почему-то советник открывает позиции не во всех терминалах

 
tt07 #:

дело в том что на всех терминал одни и те же настройки, везде автоматическая торговля включена, но почему-то советник открывает позиции не во всех терминалах

Журналы смотреть, сравнивать, цены и спред принтовать. Без этого не понять в чем проблема.
 

Здравствуйте. Помогите пожалуйста исправить ошибку MQ4 !

180 строка 

if(BarsCalculated(Ind_Handle)<Bars(Symbol(),TimeFrame)) return(prev_calculated);

//+------------------------------------------------------------------+ 

//|                                     Donchian_Fibo_Clouds_HTF.mq4 | 

//|                               Copyright © 2015, Nikolay Kositsin | 

//|                              Khabarovsk,   farria@mail.redcom.ru | 

//+------------------------------------------------------------------+ 

#property copyright "Copyright © 2015, Nikolay Kositsin"

#property link "farria@mail.redcom.ru"

//--- номер версии индикатора

#property version   "1.60"

#property description "Donchian_Fibo_Clouds с возможностью изменения таймфрейма во входных параметрах"

//--- отрисовка индикатора в главном окне

#property indicator_chart_window

//+----------------------------------------------+

//| Объявление констант                          |

//+----------------------------------------------+

#define RESET 0                                // константа для возврата терминалу команды на пересчет индикатора

#define INDICATOR_NAME "Donchian_Fibo_Clouds"  // константа для имени индикатора

#define SIZE 6                                 // константа для количества вызовов функции CountIndicator в коде

//+----------------------------------------------+

//--- количество индикаторных буферов 12

#property indicator_buffers 12

//---- использовано всего шесть графических построений

#property indicator_plots   SIZE

//+----------------------------------------------+

//| Параметры отрисовки индикатора 1             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type1   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color1  clrDodgerBlue

//--- отображение метки индикатора

#property indicator_label1  "Fibo 1.000"

//+----------------------------------------------+

//| Параметры отрисовки индикатора 2             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type2   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color2  clrDeepSkyBlue

//--- отображение метки индикатора

#property indicator_label2  "Fibo 0.786"

//+----------------------------------------------+

//| Параметры отрисовки индикатора 3             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type3   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color3  clrAqua

//--- отображение метки индикатора

#property indicator_label3  "Fibo 0.618"

//+----------------------------------------------+

//| Параметры отрисовки индикатора 4             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type4   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color4  clrYellow

//--- отображение метки индикатора

#property indicator_label4  "Fibo 0.500"

//+----------------------------------------------+

//| Параметры отрисовки индикатора 5             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type5   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color5  clrGold

//--- отображение метки индикатора

#property indicator_label5  "Fibo 0.382"

//+----------------------------------------------+

//| Параметры отрисовки индикатора 6             |

//+----------------------------------------------+

//--- отрисовка индикатора в виде цветного облака

#property indicator_type6   DRAW_FILLING

//--- в качестве цвета индикатора использован

#property indicator_color6  clrRed

//--- отображение метки индикатора

#property indicator_label6  "Fibo 0.214"

//+----------------------------------------------+

//| Объявление перечислений                      |

//+----------------------------------------------+

enum Applied_Extrem //type of extreme points

  {

   HIGH_LOW,

   HIGH_LOW_OPEN,

   HIGH_LOW_CLOSE,

   OPEN_HIGH_LOW,

   CLOSE_HIGH_LOW

  };

//+----------------------------------------------+

//| Входные параметры индикатора                 |

//+----------------------------------------------+ 

input ENUM_TIMEFRAMES TimeFrame=PERIOD_H4; // Период графика индикатора (таймфрейм)

input uint FiboPeriod=72;                  // Period of averaging

input Applied_Extrem Extremes=HIGH_LOW;    // Type of extreme points

input int Margins=-2;

input double Level1=0.786;

input double Level2=0.618;

input double Level3=0.500;

input double Level4=0.382;

input double Level5=0.214;

input int Shift=0; // Сдвиг индикатора по горизонтали в барах

//+----------------------------------------------+

//--- объявление целочисленных переменных начала отсчета данных

int min_rates_total;

//--- объявление целочисленных переменных для хендлов индикаторов

int Ind_Handle;

//+------------------------------------------------------------------+

//| Получение таймфрейма в виде строки                               |

//+------------------------------------------------------------------+

string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)

  {return(StringSubstr(EnumToString(timeframe),7,-1));}

//+------------------------------------------------------------------+

//| Класс индикаторных буферов                                       |

//+------------------------------------------------------------------+  

class CIndBuffers

  {

public:

   double            m_UpBuffer[];

   double            m_DnBuffer[];

  };

//--- объявление динамических массивов, которые в дальнейшем

//--- будут использованы в качестве индикаторных буферов

CIndBuffers Ind[SIZE];

//+------------------------------------------------------------------+    

//| Custom indicator initialization function                         | 

//+------------------------------------------------------------------+  

int OnInit()

  {

//--- проверка периодов графиков на корректность

   if(!TimeFramesCheck(INDICATOR_NAME,TimeFrame)) return(INIT_FAILED);

//--- инициализация переменных 

   min_rates_total=2;

//--- получение хендла индикатора Donchian_Fibo_Clouds

   Ind_Handle=iCustom(Symbol(),TimeFrame,"Donchian_Fibo_Clouds",FiboPeriod,Extremes,Margins,Level1,Level2,Level3,Level4,Level5,0);

   if(Ind_Handle==INVALID_HANDLE)

     {

      Print(" Не удалось получить хендл индикатора Donchian_Fibo_Clouds");

      return(INIT_FAILED);

     }

//---

   for(int numb=0; numb<SIZE; numb++)

     {

      int count=numb*2;

      //---- превращение динамических массивов в индикаторные буферы

      SetIndexBuffer(count,Ind[numb].m_UpBuffer,INDICATOR_DATA);

      SetIndexBuffer(count+1,Ind[numb].m_DnBuffer,INDICATOR_DATA);

      //---- осуществление сдвига индикаторов по горизонтали

      PlotIndexSetInteger(numb,PLOT_SHIFT,Shift);

      //---- установка значений индикатора, которые не будут видимы на графике

      PlotIndexSetDouble(numb,PLOT_EMPTY_VALUE,EMPTY_VALUE);

      //--- индексация элементов в буфере как в таймсерии

      ArraySetAsSeries(Ind[numb].m_UpBuffer,true);

      ArraySetAsSeries(Ind[numb].m_DnBuffer,true);

     }

//--- создание имени для отображения в отдельном подокне и во всплывающей подсказке

   string shortname;

   StringConcatenate(shortname,INDICATOR_NAME,"(",GetStringTimeframe(TimeFrame),")");

   IndicatorSetString(INDICATOR_SHORTNAME,shortname);

//--- определение точности отображения значений индикатора

   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

//--- завершение инициализации

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+  

//| Custom iteration function                                        | 

//+------------------------------------------------------------------+  

int OnCalculate(const int rates_total,    // количество истории в барах на текущем тике

                const int prev_calculated,// количество истории в барах на предыдущем тике

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  {

//--- проверка количества баров на достаточность для расчета

   if(rates_total<min_rates_total) return(RESET);

   if(BarsCalculated(Ind_Handle)<Bars(Symbol(),TimeFrame)) return(prev_calculated);

//--- индексация элементов в массивах как в таймсериях  

   ArraySetAsSeries(time,true);

//---

   for(int numb=0; numb<SIZE; numb++)

      if(!CountIndicator(0,NULL,TimeFrame,Ind_Handle,numb*2,Ind[numb].m_UpBuffer,numb*2+1,Ind[numb].m_DnBuffer,time,rates_total,prev_calculated,min_rates_total))

         return(RESET);

//---     

   return(rates_total);

  }

//+------------------------------------------------------------------+

//| CountLine                                                        |

//+------------------------------------------------------------------+

bool CountIndicator(uint     Numb,            // номер функции CountIndicator по списку в коде индикатора (стартовый номер - 0)

                    string   Symb,            // символ графика

                    ENUM_TIMEFRAMES TFrame,   // период графика

                    int      IndHandle,       // хендл обрабатываемого индикатора

                    uint     UpBuffNumb,      // номер верхнего буфера обрабатываемого индикатора для облака

                    double&  UpIndBuf[],      // приемный верхний буфер индикатора для облака

                    uint     DnBuffNumb,      // номер нижнего буфера обрабатываемого индикатора для облака

                    double&  DnIndBuf[],      // приемный нижний буфер индикатора для облака

                    const datetime& iTime[],  // таймсерия времени

                    const int Rates_Total,    // количество истории в барах на текущем тике

                    const int Prev_Calculated,// количество истории в барах на предыдущем тике

                    const int Min_Rates_Total)// минимальное количество истории в барах для расчета

  {

//---

   static int LastCountBar[SIZE];

   datetime IndTime[1];

   int limit;

//--- расчеты необходимого количества копируемых данных

//--- и стартового номера limit для цикла пересчета баров

   if(Prev_Calculated>Rates_Total || Prev_Calculated<=0)// проверка на первый старт расчета индикатора

     {

      limit=Rates_Total-Min_Rates_Total-1; // стартовый номер для расчета всех баров

      LastCountBar[Numb]=limit;

     }

   else limit=LastCountBar[Numb]+Rates_Total-Prev_Calculated; // стартовый номер для расчета новых баров 

//--- основной цикл расчета индикатора

   for(int bar=limit; bar>=0 && !IsStopped(); bar--)

     {

      //--- копируем вновь появившиеся данные в массив IndTime

      if(CopyTime(Symbol(),TFrame,iTime[bar],1,IndTime)<=0) return(RESET);

      //---

      if(iTime[bar]>=IndTime[0] && iTime[bar+1]<IndTime[0])

        {

         LastCountBar[Numb]=bar;

         double UpArr[1],DnArr[1];

         //--- копируем вновь появившиеся данные в массивы

         if(CopyHigh(IndHandle,UpBuffNumb,iTime[bar],1,UpArr)<=0) return(RESET);

         if(CopyLow(IndHandle,DnBuffNumb,iTime[bar],1,DnArr)<=0) return(RESET);



         UpIndBuf[bar]=UpArr[0];

         DnIndBuf[bar]=DnArr[0];

        }

      else

        {

         UpIndBuf[bar]=UpIndBuf[bar+1];

         DnIndBuf[bar]=DnIndBuf[bar+1];

        }

     }

//---     

   return(true);

  }

//+------------------------------------------------------------------+

//| TimeFramesCheck()                                                |

//+------------------------------------------------------------------+    

bool TimeFramesCheck(string IndName,

                     ENUM_TIMEFRAMES TFrame) //Период графика индикатора (таймфрейм)

  {

//--- проверка периодов графиков на корректность

   if(TFrame<Period() && TFrame!=PERIOD_CURRENT)

     {

      Print("Период графика для индикатора "+IndName+" не может быть меньше периода текущего графика!");

      Print("Следует изменить входные параметры индикатора!");

      return(RESET);

     }

//---

   return(true);

  }

//+------------------------------------------------------------------+

	          
Файлы:
 
Sokolov Vladimir #:
...

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
Sergey Golubev #:

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

OK ! 
 
Sokolov Vladimir #:

Здравствуйте. Помогите пожалуйста исправить ошибку MQ4 !

180 строка 

if(BarsCalculated(Ind_Handle)<Bars(Symbol(),TimeFrame)) return(prev_calculated);

CopyHigh(Symbol(),Period(),iTime[bar],1,UpArr)

 
Sokolov Vladimir #:

Здравствуйте. Помогите пожалуйста исправить ошибку

36 и 99 строки !

Всё исравили !

//+------------------------------------------------------------------+
//|                                                     Triangle.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern bool trian = true;

bool flag = true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime time = TimeCurrent()%86400;
   
              if(time > 0 && time < 1800)
                {
                if(flag == true)
                {
              double high = iHigh(_Symbol,PERIOD_D1,1);
              double low  = iLow(_Symbol,PERIOD_D1,1);
              double open = iOpen(_Symbol,PERIOD_D1,0);
              
              if(trian == false)
                {              
              string name_hl ="hl"+TimeToStr(TimeCurrent());
              string name_ho ="ho"+TimeToStr(TimeCurrent());
              string name_lo ="lo"+TimeToStr(TimeCurrent());
              
              ObjectCreate(name_hl,OBJ_TREND,0,Data_high(),high,Data_low(),low);
              ObjectSet(name_hl,OBJPROP_RAY,false);
              ObjectSetInteger(0,name_hl,OBJPROP_COLOR,clrBlue);
              
              ObjectCreate(name_ho,OBJ_TREND,0,Data_high(),high,TimeCurrent()+_Period*9*60,open);
              ObjectSet(name_ho,OBJPROP_RAY,false);
              ObjectSetInteger(0,name_ho,OBJPROP_COLOR,clrBlue);
              
              ObjectCreate(name_lo,OBJ_TREND,0,Data_low(),low,TimeCurrent()+_Period*9*60,open);
              ObjectSet(name_lo,OBJPROP_RAY,false);
              ObjectSetInteger(0,name_lo,OBJPROP_COLOR,clrBlue);
              }
              
              if(trian == true)
              {
               string delta = "tr"+TimeToStr(TimeCurrent());
               ObjectCreate(delta,OBJ_TRIANGLE,0,Data_high(),high,Data_low(),low,TimeCurrent()+_Period*9*60,open);
               ObjectSet(delta,OBJPROP_BACK,false);
              }
              
              flag = false;
           }
        } else flag = true;
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//I Дата хай
//+------------------------------------------------------------------+
datetime Data_high()
{
 int max = ArrayMaximum(High,24,1);
 
 datetime max_2 = Time [max];
 
 return(max_2);
}
//+------------------------------------------------------------------+
//I Дата лоу
//+------------------------------------------------------------------+
datetime Data_low()
{
 int low = ArrayMinimum(Low,24,1);
 
 datetime low_2 = Time [low];
 
 return(low_2);
 }
 //+------------------------------------------------------------------+
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.08.30
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Всем добрый день
double MinOpenBuy(int a = 1)
   {
   int tick = 0;
   datetime time = 0;
   double result=0,lot=0,profit=0,openprice=0,
          NewPrice, OldPrice = DBL_MAX;
   for(int i=OrdersTotal(); i>=0; i--)
   {
      if(a_position.SelectByIndex(i))
      {
         if (a_position.PositionType() == POSITION_TYPE_BUY && a_position.Magic() == MagicNumber && a_position.Symbol() == a_symbol.Name())
         {
            NewPrice = a_position.PriceOpen();
            if ( NewPrice < OldPrice)
            {
               OldPrice = NewPrice;
               profit = NormalizeDouble(a_position.Commission()+a_position.Swap()+a_position.Profit(),2);
               lot = a_position.Volume(); 
               time = a_position.Time(); 
               tick = a_position.Ticket(); 
            }
         }
      }
   }
   if(a==1) {result = OldPrice;} else
   if(a==2) {result = profit;} else
   if(a==3) {result = lot;} else
   if(a==4) {result=(double)time;}else
   if(a==5) {result=(double)tick;
   }
   else     {result=0;}
   return(result);
  }

Перегоняю один из свой советников из MQL4 в MQL5.

Данная функция должна была, вычислять Ордер с минимальной ценой открытия и передавать его данные. 

К сожалении в MQL5 она работает не корректно, а именно выводит значения первого открытой позиции.

Где ошибка? (шутку про ДНК я слышал).

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