У меня сейчас задача в уствновке стопа через OrderModify сразу после OpenSend и проверке наличия этого стопа
Если он не сработал, то больше не отслеживаем его, если нет, то какая ошибка и пытаться дальше ставить...ставить...и ставить...)
RefreshRates();double SLS =Ask+Stop*Point;//стоп на продажу
Modify =OrderModify(OrderTicket(),OrderOpenPrice(),SLS,OrderTakeProfit(),0,Red);if(Modify ==false){Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());for(int j=0;; j++)//пытаемся пока ДЦ не умрет){
SLS = SLS+j*Point;//увеличиваем стоп на 1 пп RefreshRates();
Modify =OrderModify(OrderTicket(),OrderOpenPrice(),SLS,OrderTakeProfit(),0,Red);if(Modify==true)break;elsePrint("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());}}
1. зачем лишний раз определять тип переменной - это ошибка должна выскакивать при компиляции
2. вместо continue - переход к новой итерации (т.е. к новой попытке модификации), использовать break - выход из цикла (причём бесконечного, что не есть хорошо)
open #1 sell 0.01 EURUSD ok modify #1 sell 0.01 EURUSD ok Ошибка при попытке установить стоп для SEL, код ошибки =0 stop loss #1 open #2 sell 0.01 EURUSD ok modify #2 sell 0.01 EURUSD ok Ошибка при попытке установить стоп для SEL, код ошибки =0 stop loss #2 open #3 sell 0.01 EURUSD ok modify #3 sell 0.01 EURUSD ok Ошибка при попытке установить стоп для SEL, код ошибки =0
вход на SELL
RefreshRates();if((OrdersTotal()==0)&&(Bid== Enter))//бъем до упора эту цену{if(IsTradeContextBusy()==false){OrderSend(Symbol(),OP_SELL, Lot, Enter, Slippage,0, ldTake, lsComm, MAGIC,0, clOpenSell);if(OrdersTotal()>0){
ModifySL();//ставим стоп
SLBU =OrderOpenPrice()-BU;//цена БУ}elsePrint("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());}}
модифи SELL
void ModifySL(){if(OrderSelect(0,SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY){RefreshRates();OrderModify(OrderTicket(),OrderOpenPrice(),Bid-StopL*Point,OrderTakeProfit(),0,Red);if(OrderStopLoss()==0)Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());}elseRefreshRates();OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopL*Point,OrderTakeProfit(),0,Red);if(OrderStopLoss()==0)Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());}
}
}
Вот для критики конечный вариант открытия и модификации позы.
"+" и "-" этого варианта?
Открытие sell
RefreshRates();if((OrdersTotal()==0)&&(Bid== Enter))//бъем до упора эту цену{if(IsTradeContextBusy()==false){OrderSend(Symbol(),OP_SELL, Lot, Enter, Slippage,0, ldTake, lsComm, MAGIC,0, clOpenSell);if(OrdersTotal()>0){
ModifySL();//ставим стоп
SLBU =OrderOpenPrice()-BU;//цена БУ}elsePrint("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());}}
модификация стопа
void ModifySL(){if(OrderSelect(0,SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY){RefreshRates();bool Modify =OrderModify(OrderTicket(),OrderOpenPrice(),Bid-StopL*Point,OrderTakeProfit(),0,Red);if(Modify ==false)Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());}else{RefreshRates();
Modify =OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopL*Point,OrderTakeProfit(),0,Red);if(Modify ==false)Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());}}}
Внимательно не спеша почитайте тему!
пишу там о варианте
пробивания входа! даже если БРОКЕР дает реквоту ...
'код ошибки 138 и реал-счет'
Если вы про этот вариант и он относится к OrderModify
YuraZ писал(а) >>
допустим
получен сигнал -
на тике бъем на вход раз 5
не пробили! вышли
на втором тике после сигнала входим и долбим далше!
..то я ещё не вырос до тиков)) Как их учитывать 1-й тик, 2-й тик?
Sleep(2000); // это 2 секунды ждать после ошибки
А ждать новый тик сколько?
Попробуйте так.
У меня сейчас задача в уствновке стопа через OrderModify сразу после OpenSend и проверке наличия этого стопа
Если он не сработал, то больше не отслеживаем его, если нет, то какая ошибка и пытаться дальше ставить...ставить...и ставить...)
заменить на это:
здесь:
1. зачем лишний раз определять тип переменной - это ошибка должна выскакивать при компиляции
2. вместо continue - переход к новой итерации (т.е. к новой попытке модификации), использовать break - выход из цикла (причём бесконечного, что не есть хорошо)
1. зачем лишний раз определять тип переменной - это ошибка должна выскакивать при компиляции
Исправил)
2. вместо continue - переход к новой итерации (т.е. к новой попытке модификации), использовать break - выход из цикла
Спасибо!
..причём бесконечного, что не есть хорошо..
Бесконечного потому что стоп нужно выставить обязательно..
А если сделаю пару попыток и будет отказ по какой-то причине и за это время цена уйдет далеко против позиции.. Что тогда делать?
Ошибки в журнале:
open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Ошибка при попытке установить стоп для SEL, код ошибки =0
stop loss #1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Ошибка при попытке установить стоп для SEL, код ошибки =0
stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Ошибка при попытке установить стоп для SEL, код ошибки =0
вход на SELL
модифи SELL
Если вы про этот вариант и он относится к OrderModify
..то я ещё не вырос до тиков)) Как их учитывать 1-й тик, 2-й тик?
Sleep(2000); // это 2 секунды ждать после ошибки
А ждать новый тик сколько?
при каждом тике
вызывается
START()
{
}
---
учтите что если вы долго находитесь в функции START
вы вполне можете пропустить один или несколько тиков
например вы зашли в функцию START и сидите в ней 10 минут, логично что прийдут тики но вы их не поймате
хотя ночью тики могут не приходить достаточно долго
---
потому нахождение в START долгое время - плохо сказывается на поимке тиков ( если они Вам важны )
пишите экономные программы с минимумом циклов и задержек
---
...учтите что если вы долго находитесь в функции START
вы вполне можете пропустить один или несколько тиков
например вы зашли в функцию START и сидите в ней 10 минут, логично что прийдут тики но вы их не поймате
хотя ночью тики могут не приходить достаточно долго
---
потому нахождение в START долгое время - плохо сказывается на поимке тиков ( если они Вам важны )
пишите экономные программы с минимумом циклов и задержек
---
Если использовать ф-ю RefreshRates() перед модификацией или установкой ордера, то как раз обновляется состояние за пределами Start(), т.е. тиков?
Я правильно понимаю?
Вот для критики конечный вариант открытия и модификации позы.
"+" и "-" этого варианта?
Открытие sell
модификация стопа