Скачать MetaTrader 5

Ошибка Sell Stop

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
izlio
9
izlio  

Хочу создать ордер Sell Stop, для этого использую CTrade, по логике (моей, она может быть не верной) чтобы выставить данный ордер, создаем условие где bid должен быть больше price. Отсюда Take Profit = price - тейкпрофит в пунктах и Stop Loss = price + стоплос в пунктах (значения в пунктах вводятся потому считаю от цены открытия price). 

По итогу получаю invalid price или invalid stops. Если не трудно приведите пример конкретно для SellStop().

Спасибо за уделенное внимание, понимаю что вопрос возможно слишком простой и очевидный, но за сутки так и не понял в чем ошибка.

Andy Sanders
586
Andy Sanders  

1. стоп-ордера устанавливаются только ЗА пределами спреда
2. стоп-ордер на покупку всегда на цене ASK, на продажу - BID
3. дополнительно, на форексных кухнях, чтобы не пипсовали, придумали такое понятие как Stop Level, минимальный размер стоп-лосс ордера, он ДОЛЖЕН быть больше спреда, поэтому если отрытие на покупку по ASK, то стоп-лосс ставится ниже BID, и наоборот

код без проверки, за точным названием констант - в Google и документацию

string symbol = Symbol();

double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
double step = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
double stopLevel = SymbolInfoDouble(symbol, SYMBOL_TRADE_STOPS_LEVEL);

// Buy

double buyPrice = ask;                                      // покупаем по цене ВЫШЕ спреда
double buyStop = bid - step;                             // стоп-лосс на нижней границе спреда минус 1 пункт
double buyProfit= ask + step;                            // тейк-профит на 1 пункт выше верхней границы спреда

buyStop = MathMin(buyStop, bid - stopLevel);    // проверяем, что стоп-лосс точно НИЖЕ разрешенного дилером

OrderSend( ... ORDER_TYPE_BUY ... )

// Sell

double sellPrice = bid;                                        // продаем по цене НИЖЕ спреда
double sellStop = ask + step;                             // стоп-лосс на верхней грнице + 1 пункт
double sellProfit= bid - step;                               // тейк-профит на 1 пункт ниже спреда

sellStop = MathMax(sellStop, ask + stopLevel);    // проверяем, что стоп-лосс точно ВЫШЕ разрешенного дилером


OrderSend( ... ORDER_TYPE_SELL ... )
Vladimir M.
559
Vladimir M.  

Andy Sanders:

SYMBOL_TRADE_STOPS_LEVEL

Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров

int

int

Ivan Ivanov
1804
Ivan Ivanov  
rosomah:

SYMBOL_TRADE_STOPS_LEVEL

Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров

int

int

Указывает количество Point . Нужно записать так :

double stopLevel = _Point*SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий