Lot = GetLots((stoploss - open_price) / pnt);
допустим стоплосс у вас 1.04689
цена открытия 1.04539
тогда лот равен 0.00150 а если разделить на pnp(Point), то размер лота получется равным 150
Lot = GetLots((stoploss - open_price) / pnt);
проведите советник в маркет и будете очень близко к своей цели, к реал функциям
-----------------------------------------
bool open=false;
int ticket = 0;
while(!open && !IsStopped())
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,300,0,0,"",Magic,0,Lime);
if(ticket > 0) open = true;
}
----------------------------------------------------------------------------
Здесь цикл while будет посылать запросы на открытие ордера до его успешной установки.
---------------------------------------------------------------------------------------------
<code>#property strict //----------- extern int SL = 50; // уровень выставления SL, если 0, то SL не выставляется extern int TP = 50; // уровень выставления TP, если 0, то TP не выставляется extern double Lots = 0.1; // объем ордера extern int Attempts = 10; // кол-во попыток открытия extern int Slippage = 3; // кол-во попыток открытия extern int Magic = 1961; // уникальный номер ордера string txt; int slippage, StopLevel; string symbol; double pnt, sl, tp; //+----------------------------------------------------------------------------+ int init() { symbol = Symbol(); pnt = Point; StopLevel = int (MarketInfo(symbol,MODE_STOPLEVEL)); sl = SL*Point; tp = TP*Point; return(0); } //+----------------------------------------------------------------------------+ int start() { OpenOrder (OP_BUY, Ask); OpenOrder (OP_SELL, Bid); return(0); } //+------------------------------------------------------------------+ //| Открытие ордера | //+------------------------------------------------------------------+ bool OpenOrder (int direction, double open_price) { double Lot = 0; int ticket = 0, ticket1 = 0, n = 0, i = 0; double stoploss = GetStopLoss(direction, open_price); double takeprofit = GetTakeProfit(direction, open_price); color Color= clrWhite; if (direction == OP_BUY) { Lot = GetLots((open_price - stoploss) / pnt); Print("Lot22 = ",Lot); //*************************************************************************************************************************** Color = clrBlue; } if (direction == OP_SELL) { Lot = GetLots((stoploss - open_price) / pnt); Print("Lot22 = ",Lot); //*************************************************************************************************************************** Color = clrRed; } //--- for (i = 1; i <= MathMax(1, Attempts); i++) { RefreshRates(); ticket = OrderSend(symbol,direction,Lot,open_price,Slippage,0,0, IntegerToString(Magic) + " Спред:" + DoubleToStr((Ask - Bid) / pnt, 1), Magic,0,Color); if(ticket<0) Print(__FUNCTION__"(): Ошибка № ",GetLastError()," при открытии ",direction," - ордера"); if (ticket > 0) // Если ордер открыт { for (n = 1; n <= MathMax(1, Attempts); n++) { Sleep(3000); RefreshRates(); // ----------------------------устанавливаем SL и ТР-------------------------------------- ticket1=OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,Green); if (ticket1 > 0) return(true); if (ticket1 <= 0 && n >= Attempts) // Если исчерпаны все попытки return(false); } return(true); } if (ticket <= 0 && i < Attempts) // Если не исчерпаны все попытки { Sleep(3000); // ждем 3 секунды continue; // и пробуем ещё раз } if (ticket<=0 && i >= Attempts) // Если исчерпаны все попытки return(false); } return(true); // До этого момента не дойдёт, но... } //+------------------------------------------------------------------+ double GetTakeProfit(int Dir, double price) { double TakeProfit=0; return(TakeProfit); } //+------------------------------------------------------------------+ double GetStopLoss(int Dir, double price) { double StopLoss=0; return(StopLoss); } //+------------------------------------------------------------------+ double GetLots(double price) { double Lot=0; return(Lot); } //+------------------------------------------------------------------+ </code>
Хочу предложить к рассмотрению функцию, предложенную Владимиром Хлыстовым (cmillion).Она с болшей вероятностью открывает ордера. Можно потом добавить и отложки. Но это потом.
<code> //+------------------------------------------------------------------+ //| Открытие ордера | //+------------------------------------------------------------------+ bool OpenOrder (int direction, double open_price) { double Lot = 0; int ticket = 0, ticket1 = 0, n = 0, i = 0; double stoploss = StopLoss(direction, open_price); double takeprofit = TakeProfit(direction, open_price); if (direction == OP_BUY) { Lot = Lots((open_price - stoploss) / _pnt); Print("Lot22 = ",Lot); //*************************************************************************************************************************** Color = Blue; } if (direction == OP_SELL) { Lot = Lots((stoploss - open_price) / _pnt); Print("Lot22 = ",Lot); //*************************************************************************************************************************** Color = Red; } //--- for (i = 1; i <= MathMax(1, RetryAttempts); i++) { RefreshRates(); ticket = OrderSend(_Symbol,direction,Lot,open_price,slippage,0,0, IntegerToString(magic) + " Спред:" + DoubleToStr((Ask - Bid) / _pnt, 1), magic,0,Color); if(ticket<0){ Print(__FUNCTION__"(): Ошибка № ",GetLastError()," при открытии ",direction," - ордера"); } if (ticket > 0) // Если ордер открыт { for (n = 1; n <= MathMax(1, RetryAttempts); n++) { Sleep(3000); RefreshRates(); // устанавливаем SL и ТР ticket1=OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,Green); if (ticket1 > 0) return(true); if (ticket1 <= 0 && n == RetryAttempts) // Если исчерпаны все попытки return(false); } return(true); } if (ticket <= 0 && i < RetryAttempts) // Если не исчерпаны все попытки { Sleep(3000); // ждем 3 секунды continue; // и пробуем ещё раз } if (ticket<=0 && i == RetryAttempts) // Если исчерпаны все попытки return(false); } return(true); // До этого момента не дойдёт, но... } //+------------------------------------------------------------------+ </code>
www.mql5.com/ru/users/cat7?ysclid=m69khejyvq136296018
www.mql5.com/ru/users/am2
Лучше язвить, чем язву иметь
Я не язвлю, а деликатно(чтобы вас не обидеть) намекаю
Тут у нас девушка обитает. Почему-то мама OXY назвала. Так вот, ее коды гораздо симпатичнее и продуманнее, чем коды АМ2..
АМ2 я не защищаю, просто его советники упрощены(для того чтоб быстрее работали в тестере стратегий, (для некоторых это важнее), чтоб проверить стратегию и как можно быстрее проверить советник с разными настройками), как говориться каждому своё.
Советники которые размещаются «в столе заказов» не предназначены для торговли на реале, а скорее как предварительный набросок, как говориться. Не надо ждать от них чуда.
Вот здесь Бишоп разъесняетzakaz.opentraders.ru/42058.html
А вот немного размышлений от АМ2
mql.opentraders.ru/33776.html
mql.opentraders.ru/31257.html
kvashnin007