Лента последних комментариев


0
А как он получится правильным
Lot = GetLots((stoploss - open_price) / pnt);


допустим стоплосс у вас 1.04689
цена открытия 1.04539
тогда лот равен 0.00150 а если разделить на pnp(Point), то размер лота получется равным 150
avatar

alex30774

  • 24 января 2025, 16:24
0
Это первый вариант, только без ограничения цикла.
avatar

kvashnin007

  • 24 января 2025, 15:52
0
проведите советник в маркет и будете очень близко к своей цели, к реал функциям


Не понял. ПЕРЕВЕДИ. Что, куда и зачем.
avatar

kvashnin007

  • 24 января 2025, 15:49
0
Лот поучился не правильный или еще по какой-то причине не открывается ордер и усе… Висим.
avatar

kvashnin007

  • 24 января 2025, 15:47
0
Вот вам ещё пища для размышления.Небольшой пример:
-----------------------------------------

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 будет посылать запросы на открытие ордера до его успешной установки. 

---------------------------------------------------------------------------------------------
avatar

alex30774

  • 24 января 2025, 14:33
0
проведите советник в маркет и будете очень близко к своей цели, к реал функциям
avatar

AM2

  • 24 января 2025, 14:26
0
будут, если при этом не будет реквота или другой ошибки при которой заявка будет отклонена.
avatar

alex30774

  • 24 января 2025, 14:04
0
В данном случае будут открываться сразу рыночные ордера?
avatar

Aleh7999

  • 24 января 2025, 13:46
0
Слегка подредактировал под себя любимого.

SL, TP выставляются после открытия ордера.
Кроме того SL,TP и Lot определяются (высчитываются с проверкой на валидность во внешних функциях).

<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>


Пока так. Дальше начнем разбираться с лотами и ограничениями. Чуть позже — работой над ошибками.
avatar

kvashnin007

  • 24 января 2025, 12:46
0
Вот в этом и загвоздка: согласится ли Denis2134 использовать индикатор в моновалютном(односимвольном) варианте.
Можно и мультивалютном, но для этого надо чтоб Denis2134 сумел правильно прописать имена объектов.Симеет или нет неизвестно.И захочет ли ещё с этим заморачиваться.
avatar

alex30774

  • 24 января 2025, 12:13
0
В том и дело, что можно вытащить из графика все объекты, кроме символов.
avatar

verta81

  • 24 января 2025, 12:00
0
Там не нужен исходник.Можно брать данные с графическоно объекта.Но чтоб получилось коректно и без всяких ошибок придёться оставить один символ.Но пойдёт ли на это(согласится) Denis2134 это уже другой вопрос

avatar

alex30774

  • 24 января 2025, 11:51
0
Хочу предложить к рассмотрению функцию, предложенную Владимиром Хлыстовым (cmillion).Она с болшей вероятностью открывает ордера. Можно потом добавить и отложки. Но это потом.

В этой функции нет проверки на ошибки, точнее говоря нет конромер(противодействий)на ошибки и еёиспользование довольно опасно.
Может случиться реквот(или другая ошибка) и советник не закроет сделку по обратному сигналу и тогда будет убыток.
avatar

alex30774

  • 24 января 2025, 11:32
0
Я о том же. Но есть хвастуны. Хвала им.

В свободном доступе есть много интересного кода. Я на нем учился. Сначала доработки- переработки. Потом немного своего. Потом… Я здесь. Несколько индикаторов под себя и для. Современем — большинство в корзину. Несколько советников. Но тоже не ахти. Зато проверил кое-какие мыслишки. Мысли рациональные и логичные, но… Ошибки убивают.

Я здесь не открыл школу обучения программированию. Пытаюсь найти собутыльников для совместного обучения. Кто-то поделится чем-то полезным. Я поделиться. Каждому польза. Плюс гимнастика для серого. Особенно в мои года полезна. Забываю имена любовниц. Теперь они у меня одни котики и зайки.

Да и вообще. Лучше общения только общение по интересам.
avatar

kvashnin007

  • 24 января 2025, 08:43
0
Нет. Цикл в цикле — чушь. Да и еще повизгивает.

Не вникал в вышеуказанный код. Но он с ошибками. Может это повесть о бесплатном сыре…
Хрен его знает. Я обычно пишу функции сам. Не факт, что правильно, но сам. Тот вариант от Хлыстова не стоит внимания. Там много логических помарок. Нашел другой образец. он чист, как Тауфон. Поработаем над ним.
Принципиально алгоритм «настойчивости» ничем не отличается от Хлыстова. Ну кроме того, что расчеты лота, SL и ТР отданы внешним функциям.Что есть гуд. Здесь также SL и ТР выставляются одномоментно с ордером. Что не есть гуд. Я бы поправил.

<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>


Да, и функция bool в отличие от void позволяет «бесплатно» проводить дополнительную проверку на исполнение. True или false.

Жена пристает. Завтра исправлю под себя.

avatar

kvashnin007

  • 24 января 2025, 00:14
0
Исходник индикатора дадите, сделаем.
avatar

verta81

  • 23 января 2025, 21:45
0
у меня на демке все норм.
avatar

verta81

  • 23 января 2025, 21:19
0
Тут у нас девушка обитает. Почему-то мама OXY назвала

OXY, потому что Оксана Беренко
www.mql5.com/ru/users/cat7?ysclid=m69khejyvq136296018


кстати АМ2, он же Андркй Корнишкин
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


P.S.Если лень всё это читать, то вдвух словах: не один программист не напишет бесплатно что-то хорошее.
avatar

alex30774

  • 23 января 2025, 21:14