Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 122

 
Mickey Moose:   дописал то что хотел могу скинуть на рассмотрение. Сливает отлично. Но тут такое выкладывать запрещено.

в личку ... люблю сливатели ... специально писал. Когда демо за день депозит увеличит раз в 15, то сливаю обратно. Чтоб сопоставимые результаты завтра были

 
STARIJ:
Реквоты в тестере? первый раз слышу... 

Вот доказательство. Начало:


и конец:

и конец:




"Так поставьте в советнике что если так то выход и на следующем тике продолжим. "  -  Это в коде есть.

 
novichok2018:

Вот доказательство. Начало:


и конец:

и конец:




"Так поставьте в советнике что если так то выход и на следующем тике продолжим. "  -  Это в коде есть.

Ну и напишите Если(тестер) if(25 или 26 января) return

 
STARIJ:

Ну и напишите Если(тестер) if(25 или 26 января) return

Не понял зачем. Что, это поможет избежать повторения сбоя? Главное, что позиции все-таки закрываются, и если причина нечёткости исполнения команды в сбое тестера, то всё в порядке. Чтобы убедиться, что причина в другом, наверное придется ждать повторения ситуации, когда при открытой СЕЛЛ(БАЙ) откроется БАЙ(СЕЛЛ), и посмотреть, как будут закрываться.

 
novichok2018:

Вот именно это мне и нужно, вернее только для Buy и Sell . Для моей простой стратегии главное, чтобы открытые позиции не мешали друг другу видеть условия для закрытия. Может, можно все-таки обойтись без массивов? Ну не врубаюсь я в них: как создать, как обратиться - тёмный лес. Может Вам станет понятней моя ситуация по скрину:

Вроде бы в коде всё просто и работает чётко, только вот это единственный случай непонятки.

Если нужно разделить учет ордеров на Buy и Sell, то объявляется два массива и два счетчика к каждому из них:

int g_nBuyOrdersCnt, g_nSellOrdersCnt;
OrderInfo  arrstBuyOrderInfo[MAX_ORDERS_CNT], arrstSellOrderInfo[MAX_ORDERS_CNT];

В итоге цикл сбора данных будет такой:

g_nBuyOrderCnt = 0;
g_nSellOrdersCnt = 0;
for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;

   if (OrderSymbol() != Symbol())   // Если нужны ордера только по текущему символу, к графику которого прикреплен советник
      continue;

   if (OrderMagicNumber != i_nMagicNumber)  // Если имеется входной параметр советника i_nMagicNumber, в котором указан ID ордеров советника
      continue;

   if (OrderType() == OP_BUY)
      SaveOrderInfo(g_arrstBuyOrderInfo, g_nBuyOrdersCnt);
   if (OrderType() == OP_SELL)
      SaveOrderInfo(g_arrstSellOrderInfo, g_nSellOrdersCnt);
}

void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt)
{
   if (nOrderCnt >= MAX_ORDERS_CNT)
      return;

   arrstOrderInfo[nOrdersCnt].nTicket = OrderTicket();
   arrstOrderInfo[nOrdersCnt].nType = OrderType();
   arrstOrderInfo[nOrdersCnt].fOpenPrice = OrderOpenPrice();
   arrstOrderInfo[nOrdersCnt].fSL = OrderStopLoss();
   arrstOrderInfo[nOrdersCnt].fTP = OrderTakeProfit();

   ++nOrdersCnt;
}

Потом в советнике для определения наличия ордера Buy или Sell всего лишь нужно будет сделать так:

if (g_nBuyOrdersCnt > 0)
{
   // Есть ордера Buy
}
 
novichok2018:

Может, можно все-таки обойтись без массивов? 

Без массивов можно будет обойтись только в том случае, если в один момент времени предполагается существование не более одного ордера каждого типа. Тогда массив вырождается в переменную типа структуры OrderInfo (или массив с размером 1).

Но, как я вижу на представленном рисунке, это не тот случай. У Вас одновременно может быть более одного ордера каждого типа.
 
novichok2018:

Вот доказательство. Начало:

Это говорит о том, что при закрытии ордера указывается не рыночная цена. Например, Buy закрывается по Ask, а Sell - по Bid. Если смотреть на Ваш код, то такое вполне может быть, т. к. перед операцией закрытия нет проверки на тип ордера.

 

Еще раз добрый вечер. Полная суть вопроса. 

Выставляю советник (рабочий) в маркет.  платформа МТ4. Выставлять можно один файл. Файл советника. Он должен пройти валидность, но не может, так как это советник без индикаторов. Они в отдельных файлах. Советник работает с четырьмя индикаторами. Их как то надо присоединить с советнику. Либо указать пути, то есть прописать в советнике... Что? и Куда?  Подскажите, какая форма и как это сделать.

Из того что я понял необходимо воспользоваться "Ресурсами" . Но как это правильно все прописать, в какие места в советнике не знаю. Возможно Вы знаете и другие варианты решения ситуации.

Спасибо .

вот что пишет при не прохождении валидности

 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\HA_Smooth.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\HA_Smooth.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\TrendLord.ex4' [2]
 2016.04.01 00:00:00  cannot open file 'MQL4\indicators\TrendLord.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\HA_Smooth.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\HA_Smooth.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\TrendLord.ex4' [2]
 2016.04.01 00:00:05  cannot open file 'MQL4\indicators\TrendLord.ex4' [2]
 2016.04.01 00:00:10  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:10  cannot open file 'MQL4\indicators\Heiken_Ashi_Smoothed1lime.ex4' [2]
 2016.04.01 00:00:10  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]
 2016.04.01 00:00:10  cannot open file 'MQL4\indicators\MA in Color_wAppliedPrice.ex4' [2]

 
Ihor Herasko:


Большое Вам спасибо за развернутые и очень понятные ответы.

 
Ihor Herasko:

Если нужно разделить учет ордеров на Buy и Sell, то объявляется два массива и два счетчика к каждому из них:

В итоге цикл сбора данных будет такой:

Потом в советнике для определения наличия ордера Buy или Sell всего лишь нужно будет сделать так:

Не могли бы Вы пояснить вот эту строку Вашего кода: OrderInfo  arrstBuyOrderInfo[MAX_ORDERS_CNT], arrstSellOrderInfo[MAX_ORDERS_CNT]; Почему у OrderInfo нет скобок и не указан тип? и это все объявляется на глобальном уровне?

А определение наличия ордера вставлять в функцию закрытия позиций? Где? А может функция закрытия позиций с массивами вообще должна выглядеть как-то по -другому? Тяжеловато пока для меня. Спасибо.


Попытался самостоятельно воспользоваться Вашим примером, но компилятор ругается на чем свет стоит...

И по примерам из учебника тоже ругается.

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