Если от текущей цены отнять цену двадцатисекундной давности и сравнить с некой константой для последующего открытия ордера, - то как это прописать в советнике?
vitaliy zamkovoy #: Если от текущей цены отнять цену двадцатисекундной давности и сравнить с некой константой для последующего открытия ордера, - то как это прописать в советнике?
Посмотрите, этот код:
//+------------------------------------------------------------------+//| 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()
{
//--- create timerEventSetTimer(20);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---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);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
}
//+------------------------------------------------------------------+
vitaliy zamkovoy #: К сожалению, ближайшие два дня лишён возможности проверить, но примите мою благодарность!
Спасибо, но только учтите, что это не готовый код, а только направление хода моей мысли. Возможно оно не правильное. Нужно проверять. Можно рассмотреть ещё другой вариант - убрать OnTimer и попробовать этот же код в OnTick(). Короче говоря, пробуйте.
vitaliy zamkovoy #: Если от текущей цены отнять цену двадцатисекундной давности и сравнить с некой константой с последующим открытием ордера, - то как это записать?
Запомнить текущую цена и время. Сравнивать время с текущим на каждом тике, если больше 20 секунд запомнить вторую цену. Вычислить разницу между первой ценой и второй. Полученный результат сравнить с константой и принять решение по открытию ордера.
Запомнить текущую цена и время. Сравнивать время с текущим на каждом тике, если больше 20 секунд запомнить вторую цену. Вычислить разницу между первой ценой и второй. Полученный результат сравнить с константой и принять решение по открытию ордера.
Я правильно вас понял: надо ежесекундно запоминать текущую цену, чтобы при удалении каждого значения этого ряда на 20 сек. сравнивать с текущей?
Я правильно вас понял: надо ежесекундно запоминать текущую цену, чтобы при удалении каждого значения этого ряда на 20 сек. сравнивать с текущей?
Сравнение должно проходить непрерывно.
тики идут не равномерно, вопрос в алгоритме тогда, если нужно все тики проверить, значит все и запоминать и сравнивать. Если можно реже по алгоритму, то таймер и через секунду запоминать цену и через 20 секунд тоже запоминать и сравнивать. Вернее нужно помнить все цены или цены через секунду в течении 20 секунд и сравнивать с новым тиком. В секунду может быть и 1 тик, может быть один в 5 секунд, и может быть 100 за одну секунду. Надо Вам решить, как действовать когда тик в 5 секунд один, и когда 100 тиков в секунду.
тики идут не равномерно, вопрос в алгоритме тогда, если нужно все тики проверить, значит все и запоминать и сравнивать. Если можно реже по алгоритму, то таймер и через секунду запоминать цену и через 20 секунд тоже запоминать и сравнивать. Вернее нужно помнить все цены или цены через секунду в течении 20 секунд и сравнивать с новым тиком. В секунду может быть и 1 тик, может быть один в 5 секунд, и может быть 100 за одну секунду. Надо Вам решить, как действовать когда тик в 5 секунд один, и когда 100 тиков в секунду.
Да вопрос не в выборе варианта, а в сложности для меня это записать... Я сегодня здесь впервые. Абсолютный дилетант.
Да вопрос не в выборе варианта, а в сложности для меня это записать... Я сегодня здесь впервые. Абсолютный дилетант.
Просто хочу опробовать свою идею...
Алгоритм должен быть точным, и понимание условий его применения. По другому не написать код. Код это реализация всего одного алгоритма действий, не точным он быть не может.
И здесь лучше сперва самому написать, и возможно ошибки поправят.
Я сейчас ещё раз попрошу помощи у знающих людей, но вы пожалуйста на меня не отвлекайтесь, - сохраняйте принципы!
ok. Ждите пожалуйста ответа.
Если от текущей цены отнять цену двадцатисекундной давности и сравнить с некой константой для последующего открытия ордера, - то как это прописать в советнике?
Посмотрите, этот код:
С уважением, Владимир.Посмотрите, этот код:
С уважением, Владимир.К сожалению, ближайшие два дня лишён возможности проверить, но примите мою благодарность!
Спасибо, но только учтите, что это не готовый код, а только направление хода моей мысли. Возможно оно не правильное. Нужно проверять. Можно рассмотреть ещё другой вариант - убрать OnTimer и попробовать этот же код в OnTick(). Короче говоря, пробуйте.
С уважением, Владимир.
Если от текущей цены отнять цену двадцатисекундной давности и сравнить с некой константой с последующим открытием ордера, - то как это записать?
Запомнить текущую цена и время. Сравнивать время с текущим на каждом тике, если больше 20 секунд запомнить вторую цену. Вычислить разницу между первой ценой и второй. Полученный результат сравнить с константой и принять решение по открытию ордера.
Запомнить текущую цена и время. Сравнивать время с текущим на каждом тике, если больше 20 секунд запомнить вторую цену. Вычислить разницу между первой ценой и второй. Полученный результат сравнить с константой и принять решение по открытию ордера.
Я правильно вас понял: надо ежесекундно запоминать текущую цену, чтобы при удалении каждого значения этого ряда на 20 сек. сравнивать с текущей?
Сравнение должно проходить непрерывно.
Я правильно вас понял: надо ежесекундно запоминать текущую цену, чтобы при удалении каждого значения этого ряда на 20 сек. сравнивать с текущей?
Сравнение должно проходить непрерывно.
тики идут не равномерно, вопрос в алгоритме тогда, если нужно все тики проверить, значит все и запоминать и сравнивать. Если можно реже по алгоритму, то таймер и через секунду запоминать цену и через 20 секунд тоже запоминать и сравнивать. Вернее нужно помнить все цены или цены через секунду в течении 20 секунд и сравнивать с новым тиком.
В секунду может быть и 1 тик, может быть один в 5 секунд, и может быть 100 за одну секунду. Надо Вам решить, как действовать когда тик в 5 секунд один, и когда 100 тиков в секунду.
тики идут не равномерно, вопрос в алгоритме тогда, если нужно все тики проверить, значит все и запоминать и сравнивать. Если можно реже по алгоритму, то таймер и через секунду запоминать цену и через 20 секунд тоже запоминать и сравнивать. Вернее нужно помнить все цены или цены через секунду в течении 20 секунд и сравнивать с новым тиком.
В секунду может быть и 1 тик, может быть один в 5 секунд, и может быть 100 за одну секунду. Надо Вам решить, как действовать когда тик в 5 секунд один, и когда 100 тиков в секунду.
Да вопрос не в выборе варианта, а в сложности для меня это записать... Я сегодня здесь впервые. Абсолютный дилетант.
Просто хочу опробовать свою идею...
Да вопрос не в выборе варианта, а в сложности для меня это записать... Я сегодня здесь впервые. Абсолютный дилетант.
Просто хочу опробовать свою идею...
Алгоритм должен быть точным, и понимание условий его применения. По другому не написать код. Код это реализация всего одного алгоритма действий, не точным он быть не может.
И здесь лучше сперва самому написать, и возможно ошибки поправят.
Вы же понимаете знаки равно, больше меньше.