Mickey Moose: дописал то что хотел могу скинуть на рассмотрение. Сливает отлично. Но тут такое выкладывать запрещено.
в личку ... люблю сливатели ... специально писал. Когда демо за день депозит увеличит раз в 15, то сливаю обратно. Чтоб сопоставимые результаты завтра были
Ну и напишите Если(тестер) if(25 или 26 января) return
Не понял зачем. Что, это поможет избежать повторения сбоя? Главное, что позиции все-таки закрываются, и если причина нечёткости исполнения команды в сбое тестера, то всё в порядке. Чтобы убедиться, что причина в другом, наверное придется ждать повторения ситуации, когда при открытой СЕЛЛ(БАЙ) откроется БАЙ(СЕЛЛ), и посмотреть, как будут закрываться.
Вот именно это мне и нужно, вернее только для 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 всего лишь нужно будет сделать так:
Без массивов можно будет обойтись только в том случае, если в один момент времени предполагается существование не более одного ордера каждого типа. Тогда массив вырождается в переменную типа структуры OrderInfo (или массив с размером 1).
Но, как я вижу на представленном рисунке, это не тот случай. У Вас одновременно может быть более одного ордера каждого типа.
Это говорит о том, что при закрытии ордера указывается не рыночная цена. Например, 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]
Если нужно разделить учет ордеров на Buy и Sell, то объявляется два массива и два счетчика к каждому из них:
В итоге цикл сбора данных будет такой:
Потом в советнике для определения наличия ордера Buy или Sell всего лишь нужно будет сделать так:
Не могли бы Вы пояснить вот эту строку Вашего кода: OrderInfo arrstBuyOrderInfo[MAX_ORDERS_CNT], arrstSellOrderInfo[MAX_ORDERS_CNT]; Почему у OrderInfo нет скобок и не указан тип? и это все объявляется на глобальном уровне?
А определение наличия ордера вставлять в функцию закрытия позиций? Где? А может функция закрытия позиций с массивами вообще должна выглядеть как-то по -другому? Тяжеловато пока для меня. Спасибо.
Попытался самостоятельно воспользоваться Вашим примером, но компилятор ругается на чем свет стоит...
в личку ... люблю сливатели ... специально писал. Когда демо за день депозит увеличит раз в 15, то сливаю обратно. Чтоб сопоставимые результаты завтра были
Реквоты в тестере? первый раз слышу...
Вот доказательство. Начало:
и конец:
и конец:
"Так поставьте в советнике что если так то выход и на следующем тике продолжим. " - Это в коде есть.
Вот доказательство. Начало:
и конец:
и конец:
"Так поставьте в советнике что если так то выход и на следующем тике продолжим. " - Это в коде есть.
Ну и напишите Если(тестер) if(25 или 26 января) return
Ну и напишите Если(тестер) if(25 или 26 января) return
Не понял зачем. Что, это поможет избежать повторения сбоя? Главное, что позиции все-таки закрываются, и если причина нечёткости исполнения команды в сбое тестера, то всё в порядке. Чтобы убедиться, что причина в другом, наверное придется ждать повторения ситуации, когда при открытой СЕЛЛ(БАЙ) откроется БАЙ(СЕЛЛ), и посмотреть, как будут закрываться.
Вот именно это мне и нужно, вернее только для Buy и Sell . Для моей простой стратегии главное, чтобы открытые позиции не мешали друг другу видеть условия для закрытия. Может, можно все-таки обойтись без массивов? Ну не врубаюсь я в них: как создать, как обратиться - тёмный лес. Может Вам станет понятней моя ситуация по скрину:
Вроде бы в коде всё просто и работает чётко, только вот это единственный случай непонятки.
Если нужно разделить учет ордеров на Buy и Sell, то объявляется два массива и два счетчика к каждому из них:
int g_nBuyOrdersCnt, g_nSellOrdersCnt; OrderInfo arrstBuyOrderInfo[MAX_ORDERS_CNT], arrstSellOrderInfo[MAX_ORDERS_CNT];В итоге цикл сбора данных будет такой:
Потом в советнике для определения наличия ордера Buy или Sell всего лишь нужно будет сделать так:
Может, можно все-таки обойтись без массивов?
Без массивов можно будет обойтись только в том случае, если в один момент времени предполагается существование не более одного ордера каждого типа. Тогда массив вырождается в переменную типа структуры OrderInfo (или массив с размером 1).
Но, как я вижу на представленном рисунке, это не тот случай. У Вас одновременно может быть более одного ордера каждого типа.Вот доказательство. Начало:
Это говорит о том, что при закрытии ордера указывается не рыночная цена. Например, Buy закрывается по Ask, а Sell - по Bid. Если смотреть на Ваш код, то такое вполне может быть, т. к. перед операцией закрытия нет проверки на тип ордера.
Еще раз добрый вечер. Полная суть вопроса.
Выставляю советник (рабочий) в маркет. платформа МТ4. Выставлять можно один файл. Файл советника. Он должен пройти валидность, но не может, так как это советник без индикаторов. Они в отдельных файлах. Советник работает с четырьмя индикаторами. Их как то надо присоединить с советнику. Либо указать пути, то есть прописать в советнике... Что? и Куда? Подскажите, какая форма и как это сделать.
Из того что я понял необходимо воспользоваться "Ресурсами" . Но как это правильно все прописать, в какие места в советнике не знаю. Возможно Вы знаете и другие варианты решения ситуации.
Спасибо .
вот что пишет при не прохождении валидности
Большое Вам спасибо за развернутые и очень понятные ответы.
Если нужно разделить учет ордеров на Buy и Sell, то объявляется два массива и два счетчика к каждому из них:
В итоге цикл сбора данных будет такой:
Потом в советнике для определения наличия ордера Buy или Sell всего лишь нужно будет сделать так:
Не могли бы Вы пояснить вот эту строку Вашего кода: OrderInfo arrstBuyOrderInfo[MAX_ORDERS_CNT], arrstSellOrderInfo[MAX_ORDERS_CNT]; Почему у OrderInfo нет скобок и не указан тип? и это все объявляется на глобальном уровне?
А определение наличия ордера вставлять в функцию закрытия позиций? Где? А может функция закрытия позиций с массивами вообще должна выглядеть как-то по -другому? Тяжеловато пока для меня. Спасибо.
Попытался самостоятельно воспользоваться Вашим примером, но компилятор ругается на чем свет стоит...
И по примерам из учебника тоже ругается.