Помогите прописать стоп-лосс в советнике - страница 2

 
Maxim Kuznetsov:

Самое простое (но неправильное):

Добавьте в параметры

input int SL_POINTS=50;

и там где вызывается SendMarketOrder его добавьте:

SendMarketOrder(OP_SELL, NewLots, SL_POINTS, 0, MagicSell, ExpertName + " - " + SellOrders, Error);

PS/ Правильнее добавлять в функцию ModifyOrder, но кода больше, дольше рассказывать :-) Да и вообще похоже что стопы там не нужны, но вам виднее

Если конечно не займет много времени у вас
 
Alexander Ts:
Если честно даже не понимаю как добавить,если вам не сложно будет,не могли бы ли вы прописать 

мог бы но не буду :-) буду придерживаться топика темы "помогите прописать", а не "сделайте мне" :-)

----

в начале файла там где строчки с extern добавляете собственный параметр то есть 

добавляете строку (чтобы придерживаться общего стиля старинного советника, по старинке extern)

extern int SL_POINTS = 50 ; // Стоп лосс в пунктах

дальше нажимаете F3 и ищите вызов функции выставляющей ордера SendMarketOrder

её третий параметр меняете с 0 на SL_POINTS

----

только так начнёте разбираться в собственном советнике и немного в MQL :-)

 
Maxim Kuznetsov:

мог бы но не буду :-) буду придерживаться топика темы "помогите прописать", а не "сделайте мне" :-)

----

в начале файла там где строчки с extern добавляете собственный параметр то есть 

добавляете строку (чтобы придерживаться общего стиля старинного советника, по старинке extern)

extern int SL_POINTS = 50 ; // Стоп лосс в пунктах

дальше нажимаете F3 и ищите вызов функции выставляющей ордера SendMarketOrder

её третий параметр меняете с 0 на SL_POINTS

----

только так начнёте разбираться в собственном советнике и немного в MQL :-)

Вы до этого написали,что этот вариант "Самое простое (но неправильное)",в чем подвох?
 
Alexander Ts:
Вы до этого написали,что этот вариант "Самое простое (но неправильное)",в чем подвох?

в самом первом коменте в советнике : N1.01   Теперь работает и в Market Execution(TP=0, потом модификация);

автор подразумевает что сначала ордер открывается (возможно с проскальзываением), а уже потом от полученной цены открытия считается ТейкПрофит ( и соотв. ваш СтопЛосс)

но чтобы проверить работоспособность подхода, вполне можно стоп выставить сразу.

 
Maxim Kuznetsov:

мог бы но не буду :-) буду придерживаться топика темы "помогите прописать", а не "сделайте мне" :-)

----

в начале файла там где строчки с extern добавляете собственный параметр то есть 

добавляете строку (чтобы придерживаться общего стиля старинного советника, по старинке extern)

extern int SL_POINTS = 50 ; // Стоп лосс в пунктах

дальше нажимаете F3 и ищите вызов функции выставляющей ордера SendMarketOrder

её третий параметр меняете с 0 на SL_POINTS

----

только так начнёте разбираться в собственном советнике и немного в MQL :-)

"её третий параметр меняете с 0 на SL_POINTS" тут нужно просто 0 заменить на слово SL_POINTS? Я правильно понял?
 
Давайте разбираться.
input int SL_POINTS = 50 ; // Стоп лосс в пунктах

Еще стоит учесть StopLevel

int stopLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)+1;

И еще у нас есть стоимость пункта

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

Из всего этого можно вычислить расстояние стопа

double SL = (SL_POINTS>stopLevel ? SL_POINTS : stopLevel)*point;

Осталось прибавить/отнять к/от нужной цены(е) в зависимости от позиции. И получить нужную цену установки стопа.

 
Konstantin Nikitin:
Давайте разбираться.

Еще стоит учесть StopLevel

И еще у нас есть стоимость пункта

Из всего этого можно вычислить расстояние стопа

Осталось прибавить/отнять к/от нужной цены(е) в зависимости от позиции. И получить нужную цену установки стопа.

Так,мне написали сделать два действия "extern int SL_POINTS = 50 ; // Стоп лосс в пунктах дальше нажимаете F3 и ищите вызов функции выставляющей ордера SendMarketOrder её третий параметр меняете с 0 на SL_POINTS" у вас я так понимаю это первое и четвертое действие в описании,а вот это "Еще стоит учесть StopLevel int stopLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)+1; И еще у нас есть стоимость пункта double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);" куда прописать ?
 
Konstantin Nikitin:
Давайте разбираться.

Еще стоит учесть StopLevel

И еще у нас есть стоимость пункта

Из всего этого можно вычислить расстояние стопа

Осталось прибавить/отнять к/от нужной цены(е) в зависимости от позиции. И получить нужную цену установки стопа.

И это действие я не понял "Осталось прибавить/отнять к/от нужной цены(е) в зависимости от позиции. И получить нужную цену установки стопа."
 
Я что-то намудрил,что уже советник вообще не работает😂
 

ENUM_SYMBOL_INFO_DOUBLE читаем про SYMBOL_POINT

ENUM_SYMBOL_INFO_INTEGER так-же смотрим про SYMBOL_TRADE_STOPS_LEVEL

А теперь думаем если у вас есть пункты стопа, то их ведь нужно привести к стоимости для данной валютной пары. А это значит пункты умножаем на стоимость пункта.

И этим мы только получим расстояние до стопа. Но чтоб узнать цену куда ставить стоп нужно например для BUY, отнять его от BID

double sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) - SL;