Доброго времени суток!
Столкнулся с такой проблемой:
По идее когда открывается ордер, в том же направлении выставляются отложенные ордера. Стопы для обычного и отложенного ордера разные, но отложенный ордер либо не открывается(ошибка 130), либо стоп лосс и тейк профит ставится с непонятными значениями.
Как решить данную проблему?
{
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
open_step_2=open_step_2+Open_Step;
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, Ask+open_step_2*Point,2,(Ask+open_step_2)-SL*Point,(Ask+open_step_2)+TP*Point,"take_trend",MagicNumber2,0,Blue);
возможно,ошибка 130, это слишком близко поставленный ордер к цене, в основном 30пп, брокер исполняет ордера по Instant Execution
Не правильно указаны стопы может? Надо бы использовать NormalizeDouble(Bid и Digits)
if ( (SMMA1<MA28_1))
{
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--) //зачем перебор ордеров в цикле, если нет модификации ордера, а просто его установка на место со стопами сразу?
{
open_step_2=open_step_2+Open_Step; //тут зачем так замудрено? например во внешних параметрах добавить: open_step_2 = 150;
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, NormalizeDouble(Ask+open_step_2*Point,Digits),2, //зачем ticket2? просто ticket будет достаточно
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue);
//Для sell использовать цену стоп уровней Ask, а открытие и установка отложенного ордера по Bid
P.S.
Чтобы не было в дальнейшем ошибки 130, надо брать значения для установки стоп уровней хотя бы: спрейд вал.пары * 2 (т.е. если спрейд 17, то мин.уровень 30-35)
Сделал так, ситуация стала получше, но не на много, теперь стопы становятся кратными стопам основного ордера, в тестере получил вот такие результаты:
цена Стоп лосс Тэйк профит
1 2016.08.25 18:05 buy 1 3.00 4791.25 4780.25 4800.25 0.00 10000.00
2 2016.08.25 18:05 buy stop 2 1.00 4792.25 4290.25 5430.25 0.00 10000.00
3 2016.08.25 18:05 buy stop 3 1.00 4793.25 4390.25 5530.25 0.00 10000.00
4 2016.08.25 18:05 buy stop 4 1.00 4794.25 4490.25 5630.25 0.00 10000.00
5 2016.08.25 18:05 buy stop 5 1.00 4795.25 4590.25 5730.25 0.00 10000.00
6 2016.08.25 18:05 buy stop 6 1.00 4796.25 4690.25 5830.25 0.00 10000.00
7 2016.08.25 18:05 buy stop 7 1.00 4797.25 4790.25 5930.25 0.00 10000.00
8 2016.08.25 18:17 buy 2 1.00 4792.25 4290.25 5430.25 0.00 10000.00
9 2016.08.25 18:17 buy 3 1.00 4793.25 4390.25 5530.25 0.00 10000.00
Убрав *Point отложенные ордера не выставляются, а также проделав аналогичные действя на SELL сделки перестали открыаться вообще и выдают 130 ошибку
А если близкие стопы, например работает скальпинг, то после срабатывания ордера и перебора его в цикле что он рыночный цена уже будет не актуальна для установки уровней стопа,
в итоге ошибка 130 неправильные стопы.
Сделаем тогда по умному:
double Price = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step = NormalizeDouble((Price + open_step_2) * Point, Digits);
double PriceB = NormalizeDouble(Ask + Step, Digits);
double PriceS = NormalizeDouble(Bid - Step, Digits);
if ( (SMMA1<MA28_1)){
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue);
Ну да.
double Price = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step = NormalizeDouble((Price * MultStopOrd) * Point, Digits);
double PriceB = NormalizeDouble(Ask + Step, Digits);
double PriceS = NormalizeDouble(Bid - Step, Digits);
if ( (SMMA1<MA28_1)){
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue);
Проверил всё нормально и множить и плюсовать.
Где неправильно ? У меня это всё работает.
double MultStopOrd = 15; - Зачем дабл???
double Price = NormalizeDouble((Ask-Bid)/Point,Digits); - Спред в пунктах, зачем так сложно?
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits), NormalizeDouble((Bid+open_step_2)+TP*Point,Digits) - Вот тут ЛАЖА... Как и что работает? Какая будет цена стопа?
Так, по новой:
double Price = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step = NormalizeDouble((Price + open_step_2) * Point, Digits);
//-----------------------------------------------------------------------+
double PriceB = NormalizeDouble(Ask + Step, Digits);
double SLb = NormalizeDouble(PriceB - StopLoss * Point, Digits);
double TPb = NormalizeDouble(PriceB + TakeProfit * Point, Digits);
//-----------------------------------------------------------------------+
double PriceS = NormalizeDouble(Bid - Step, Digits);
double SLs = NormalizeDouble(PriceS + StopLoss * Point, Digits);
double TPs = NormalizeDouble(PriceS - TakeProfit * Point, Digits);
if ( (SMMA1<MA28_1)){
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
"EMA position:",16384,0,Green);
ticket2=OrderSend(Symbol(), OP_BUYSTOP, Lots2, PriceB, 2, SLb, TPb, "take_trend", MagicNumber2, 0, Blue);

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток!
Столкнулся с такой проблемой:
По идее когда открывается ордер, в том же направлении выставляются отложенные ордера. Стопы для обычного и отложенного ордера разные, но отложенный ордер либо не открывается(ошибка 130), либо стоп лосс и тейк профит ставится с непонятными значениями.
Как решить данную проблему?
{
ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"EMA position:",16384,0,Green);
for(i=stop_positions;i>=0; i--)
{
open_step_2=open_step_2+Open_Step;
ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, Ask+open_step_2*Point,2,(Ask+open_step_2)-SL*Point,(Ask+open_step_2)+TP*Point,"take_trend",MagicNumber2,0,Blue);