Алгоритм должен быть точным, и понимание условий его применения. По другому не написать код. Код это реализация всего одного алгоритма действий, не точным он быть не может.
И здесь лучше сперва самому написать, и возможно ошибки поправят.
Вы же понимаете знаки равно, больше меньше.
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2022, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2022, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"//ВХОДНОЙ ПАРАМЕТРinputushort Constanta=50; //Константа//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
}
//+------------------------------------------------------------------+
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
С уважением, Владимир.
Не правильно описываете задачу! Не "один раз в 20 секунд", а ежесекундно сверяться с прошедшими какое-то время назад показателями. Что касается "зачем" - это вопрос не для данной дискуссии. (А 20 секунд - просто как пример).
Это как скользящая средняя, где первая свеча сравнивается со второй. Только у меня все должно рассчитываться внутри текущей (нулевой) минутной свечи.(А ещё лучше - на линейном графике. Ведь 20 секунд могут перетечь на первую свечу).
vitaliy zamkovoy #: Не правильно описываете задачу! Не "один раз в 20 секунд", а ежесекундно сверяться с прошедшими какое-то время назад показателями. Что касается "зачем" - это вопрос не для данной дискуссии. (А 20 секунд - просто как пример).
Да, мой косяк, не до конца понял, что Вы хотите сделать/проверить.
А вот если расстояние, равное Вашей константе пройдет не за какое-то ровное количество секунд, а например, за 10,964 секунды или за 11, 283 секунды, как тогда быть? Условие будет выполнимо или уже нет?
А вот если расстояние, равное Вашей константе продет не за какое-то ровное количество секунд, а например, за 10,964 секунды или за 11, 283 секунды, как тогда быть? Условие будет выполнимо или уже нет?
С уважением, Владимир.
В понятие "сравнение с константой " я вкладываю не равенство, а "больше" "меньше". При положительной разнице сравниваем с константой со знаком +, а при отрицательной разнице сравниваем с константой со знаком " - ". Если в первом случае превышаем константу ,- покупка. Во втором случае, если значение меньше - продажа.
Как-же мне уже надоело читать всю эту ахинею… Ведь кода всего ЧЕТЫРЕ СТРОКИ, а обсуждений 3 страницы.
MqlTick mqlTick[], symbTick; // объявили переменные
SymbolInfoTick(_Symbol, symbTick); // это последний тик
CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива
20000 миллисекунд — это 20 секунд.
Дальше ставьте условие на размер переменной delta больше\меньше, влево\вправо или север\йух…
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Кольцевой буфер:
Берём буфер - достаточно большой статический массив структур "цена, время" (или два отдельных массива).
Берём две переменных - "указатели" (индексы) на голову и хвост буфера.
На каждом тике добавляем элемент в голову и продвигаем указатель.
Сравниваем время с элементом в хвосте, если надо - продвигаем указатель.
Сравниваем цену с элементом в хвосте.
Если какой-то указатель достиг конца массива - обнуляем этот указатель.
Кольцевой буфер:
Берём буфер - достаточно большой статический массив структур "цена, время" (или два отдельных массива).
Берём две переменных - "указатели" (индексы) на голову и хвост буфера.
На каждом тике добавляем элемент в голову и продвигаем указатель.
Сравниваем время с элементом в хвосте, если надо - продвигаем указатель.
Сравниваем цену с элементом в хвосте.
Если какой-то указатель достиг конца массива - обнуляем этот указатель.
Алгоритм должен быть точным, и понимание условий его применения. По другому не написать код. Код это реализация всего одного алгоритма действий, не точным он быть не может.
И здесь лучше сперва самому написать, и возможно ошибки поправят.
Вы же понимаете знаки равно, больше меньше.
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
С уважением, Владимир.
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
С уважением, Владимир.
Здравствуйте, Валерий! Полностью с Вами согласен. Для написания корректного кода необходимо точное условие для открытия позиции. Такой код тоже работает:
но весь вопрос в том, а так ли он должен работать, как задумал Виталий? Честно говоря, не совсем понимаю зачем один раз в 20 секунд (да хоть раз в 10, в 5 или в 1 секунду), проверять разницу в цене. Что это даст в плане определения направления дальнейшего движения цены?
С уважением, Владимир.
Не правильно описываете задачу! Не "один раз в 20 секунд", а ежесекундно сверяться с прошедшими какое-то время назад показателями. Что касается "зачем" - это вопрос не для данной дискуссии. (А 20 секунд - просто как пример).
Это как скользящая средняя, где первая свеча сравнивается со второй. Только у меня все должно рассчитываться внутри текущей (нулевой) минутной свечи.(А ещё лучше - на линейном графике. Ведь 20 секунд могут перетечь на первую свечу).
Не правильно описываете задачу! Не "один раз в 20 секунд", а ежесекундно сверяться с прошедшими какое-то время назад показателями. Что касается "зачем" - это вопрос не для данной дискуссии. (А 20 секунд - просто как пример).
Да, мой косяк, не до конца понял, что Вы хотите сделать/проверить.
С уважением, Владимир.
А вот если расстояние, равное Вашей константе пройдет не за какое-то ровное количество секунд, а например, за 10,964 секунды или за 11, 283 секунды, как тогда быть? Условие будет выполнимо или уже нет?
С уважением, Владимир.
А вот если расстояние, равное Вашей константе продет не за какое-то ровное количество секунд, а например, за 10,964 секунды или за 11, 283 секунды, как тогда быть? Условие будет выполнимо или уже нет?
С уважением, Владимир.
В понятие "сравнение с константой " я вкладываю не равенство, а "больше" "меньше".
Вот теперь всё понятно.
С уважением, Владимир.
Вот теперь всё понятно.
С уважением, Владимир.
Как-же мне уже надоело читать всю эту ахинею… Ведь кода всего ЧЕТЫРЕ СТРОКИ, а обсуждений 3 страницы.
20000 миллисекунд — это 20 секунд.
Дальше ставьте условие на размер переменной delta больше\меньше, влево\вправо или север\йух…