Почему isCrossing() не возвращает 2 ??? В самом isCrossing() есть вход во второй if, но потом в OnTick() не происходит вхождения в if, когда isCrossing() == 2. Что за бред...
Оба условия подходят...поэтому получаешь первый результат
Почему isCrossing() не возвращает 2 ??? В самом isCrossing() есть вход во второй if, но потом в OnTick() не происходит вхождения в if, когда isCrossing() == 2. Что за бред...
Почему-то я думаю и 1 тоже не возвращает.
Это условие
if(g_barTime < iTime(NULL,g_timeFrame,0)// и дальше
говорит об открытии нового бара. На первом тике бара open == high == low == close и == Bid — отсюда следует, что условие
&& high > ma && Bid <= ma)
или
&& low < ma && Bid >= ma)
выполнено быть не может…
Сегодня был вопрос об условии if(i != i) Вот и эти условия примерно такие-же.
"1" возвращает, делал отладку кода в MetaEditor'e.
Далее, даже если всё всему равняется, то только на первом тике.
Так работает
//--- input parametersinputint g_maPeriod = 14;
inputint g_maShift = 1;
inputENUM_APPLIED_PRICE g_maPrice = PRICE_CLOSE; //Applied priceinputENUM_MA_METHOD g_maMethod = MODE_SMA; //Method MainputENUM_TIMEFRAMES g_timeFrame = PERIOD_CURRENT; //Timeframe for calculatedatetime g_barTime=0;
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(g_barTime != iTime(NULL,g_timeFrame,0))
{
if(isCrossing()==1)
{
Print("enter to '1. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
if(isCrossing()==2)
{
Print("enter to '2. if (isCrossing)'"); g_barTime = iTime(NULL,g_timeFrame,0);
}
}
}
//+------------------------------------------------------------------+int isCrossing()
{
int res=0;
double low = iLow(Symbol(), g_timeFrame, 1);
double high = iHigh(Symbol(), g_timeFrame, 1);
double ma = iMA(_Symbol, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maPrice, 0);
if(high > ma && Bid <= ma) res=1;
if(low < ma && Bid >= ma) res=2;
return (res);
}
//+------------------------------------------------------------------+
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
В общем оставил как было изначально, только теперь из isCrossing() всё возвращается в переменную. Ничего не дублируется и всё работает. Всем спасибо :)
2021.08.2509:24:56.6292021.08.2023:50:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.6242021.08.2023:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5922021.08.2021:35:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5822021.08.2021:05:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5662021.08.2020:20:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
2021.08.2509:24:56.5542021.08.2018:50:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:45:00 Nerd Trader EURUSD,M5: enter to '2. if (isCrossing)'
2021.08.2509:24:56.5532021.08.2018:40:00 Nerd Trader EURUSD,M5: enter to '1. if (isCrossing)'
Увидел сейчас, что вы добавили лог. Вот и у вас тоже дублируются сообщения :)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Оба условия подходят...поэтому получаешь первый результат
Оба условия подходят...поэтому получаешь первый результат
Почему-то я думаю и 1 тоже не возвращает.
Это условие
говорит об открытии нового бара. На первом тике бара open == high == low == close и == Bid — отсюда следует, что условие
или
выполнено быть не может…Сегодня был вопрос об условии if(i != i) Вот и эти условия примерно такие-же.
P.S.
при том, что в ф-ии isCrossing() все оставил как есть.
Почему-то я думаю и 1 тоже не возвращает.
Это условие
говорит об открытии нового бара. На первом тике бара open == high == low == close и == Bid — отсюда следует, что условие
или
выполнено быть не может…Сегодня был вопрос об условии if(i != i) Вот и эти условия примерно такие-же.
"1" возвращает, делал отладку кода в MetaEditor'e.
Далее, даже если всё всему равняется, то только на первом тике.
"1" возвращает, делал отладку кода в MetaEditor'e.
Далее, даже если всё всему равняется, то только на первом тике.
Ну да, я был не прав. Новый бар будет только после выполнения всего условия.
Попробуй заменить high и low на open. Может не сильно повлияет на стратегию…
"1" возвращает, делал отладку кода в MetaEditor'e.
Далее, даже если всё всему равняется, то только на первом тике.
Так работает
Так работает
Сделал так и всё заработало, только сообщения из isCrossing() дублируются, потому что ф-я вызывается дважды на один тик.
В общем оставил как было изначально, только теперь из isCrossing() всё возвращается в переменную. Ничего не дублируется и всё работает. Всем спасибо :)
объясните пожалуйста в чем разница между функциями?
for (int j = OrdersHistoryTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS,MODE_HISTORY))
и
int i=OrdersHistoryTotal();
for(int pos=0; pos<i; pos++)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))