Вопрос программистам - Ограниченное открытие ордеров MT4/MT5

 

Добрый день,

подскажите пожалуйста, как прописать функцию в советнике для MT4, чтобы ордер открылся один раз. То есть получили сигнал на buy, а следующий сигнал на buy чтобы сработал после сигнала на sell и наоборот. Одним словом, чтобы убрать шумные сигналы. 

 
Axelerod777:

Добрый день,

подскажите пожалуйста, как прописать функцию в советнике для MT4, чтобы ордер открылся один раз. То есть получили сигнал на buy, а следующий сигнал на buy чтобы сработал после сигнала на sell и наоборот. Одним словом, чтобы убрать шумные сигналы. 

завести переменную LastOrderType например. В неё писать тип последнего ордера (или сигнала, как удобнее).

(затратный путь) или перед открытием сканировать ордера и историю, чтобы выявить этот LastOrderType

if (signal == OP_BUY && LastOrderType!=OP_BUY) { /* тут чего-то покупаем */ }

 

статусную переменную лучше записывать в глобалки например так:

if( условие_для_покупок )

        if( GlobalVariableGet("POSITION")!=1 )

                {

                OrderSend( параметры_ордера_для_покупки );

                GlobalVariableSet("POSITION",1);

                }

if( условие_для_продаж )

        if( GlobalVariableGet("POSITION")!=-1 )

                {

                OrderSend( параметры_ордера_для_продажи);

                GlobalVariableSet("POSITION",-1);

                }
if( условие_для_закрытия)

        if( GlobalVariableGet("POSITION")!=0 )

                {

                OrderSend( параметры_ордер_для_закрытия );

                GlobalVariableSet("POSITION",0);

                }


P.S. здесь глобалка с именем "POSITION" хранит последнее совершённое действие, по её значению можно понять что произошло: 0 = нет позиций, +1 = последняя была покупка, -1 = последняя была продажа

P.S.S. на самом деле надо ещё проверять успешность исполнения ордера (здесь я этого не показал)

 
transcendreamer:

статусную переменную лучше записывать в глобалки например так:


P.S. здесь глобалка с именем "POSITION" хранит последнее совершённое действие, по её значению можно понять что произошло: 0 = нет позиций, +1 = последняя была покупка, -1 = последняя была продажа

P.S.S. на самом деле надо ещё проверять успешность исполнения ордера (здесь я этого не показал)

Спасибо, за информацию. Посмотрю, как на практике работает))
Причина обращения: