0
проверил еще раз. закрывает точно по суммарному профиту:



Андрей подправь закрытие двух ордеров одновременно при суммарном профите(то есть один закрывается с убытком, второй с профитом но чуть большим чем убыток другого)


не обязательно по одному ордеру должен быть убыток, может быть и оба в плюс плюс
avatar

AM2

  • 8 апреля 2021, 21:39
0
сейчас так и работает. я вчера проверял
avatar

AM2

  • 8 апреля 2021, 20:33
0
данный вариант сигналит раз за свечку независимо есть ордер или нет:


//+------------------------------------------------------------------+
//|                                                     High_Low.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
input double lot= 0.22;
extern int TP   = 1000;  // ПРОФИТ
input int _period_ma  = 55;        // Период МА
extern bool _trailingStop = true;        // вкл. трала
input int magic = 123;

datetime t=0;
// -----------------------------------------------Number of bars to scan

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            if(OrderType()==type || type==-1)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Profit()
  {
   double pr=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
           {
            pr=OrderProfit();
            break;
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      Alert(_Symbol+" Order Profit: ",Profit());
      t=Time[0];
     }

   if(_trailingStop)
     {
      _TrailingStop();
     }
   int r=0;
   CountOrders();
   if(NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits) < Ask && CountOrders(OP_BUY) < 1 &&
      NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)< NormalizeDouble(iClose(_Symbol, _Period, 1), Digits) &&
      NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)> NormalizeDouble(iLow(_Symbol, _Period, 1), Digits))
     {
      r = OrderSend(Symbol(),
                    OP_BUY,
                    NormalizeDouble(lot, 2),
                    Ask,
                    30,
                    0,   //SL
                    NormalizeDouble(iHigh(_Symbol, _Period, 1) + TP*Point, Digits),  //TP
                    "МАША",
                    magic,
                    0,
                    Blue); // BUY
     }
   else
      if(NormalizeDouble(iLow(_Symbol, _Period, 1), Digits) > Bid && CountOrders(OP_SELL) < 1 &&
         NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)> NormalizeDouble(iClose(_Symbol, _Period, 1), Digits) &&
         NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits)< NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits))
        {
         r = OrderSend(Symbol(),
                       OP_SELL,
                       NormalizeDouble(lot, 2),
                       Bid,
                       30,
                       0,  //SL
                       NormalizeDouble(iLow(_Symbol, _Period, 1) - TP*Point, Digits), //TP
                       "МАША",
                       magic,
                       0,
                       Red); // SELL


        }
  }

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void _TrailingStop()
  {
   int i;
   bool m;
   double _stopLossSellF=NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits),
          _stopLossBuyF=NormalizeDouble(iMA(NULL,0,_period_ma,0,MODE_SMA,PRICE_CLOSE,1), Digits);
   if(OrdersTotal()>0)
     {
      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS))
           {
            if(OrderSymbol()==Symbol() /*&& OrderMagicNumber()==-1*/)
              {

               if(OrderType()==OP_BUY && OrderOpenPrice() < _stopLossBuyF)
                 {
                  while(IsTradeContextBusy())
                     Sleep(1000);
                  RefreshRates();
                  m = OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossBuyF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
                 }

               if(OrderType()==OP_SELL && OrderOpenPrice() > _stopLossSellF && _stopLossSellF!=0.0)
                 {
                  while(IsTradeContextBusy())
                     Sleep(1000);
                  RefreshRates();
                  m = OrderModify(OrderTicket(),OrderOpenPrice(),_stopLossSellF,OrderTakeProfit(),OrderExpiration(),CLR_NONE);
                 }
              }
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

avatar

AM2

  • 7 апреля 2021, 19:34
0
Алерт со звуковым сопровождением.
Информация в Алерте: Закрытие ордера с профитом: — «ПРОФИТ 20$, GBPUSD»


вы просили сделать алерт, я сделал.

А где символ?
Когда ордеров нет брякает на каждом тике, а когда ордера открыты АЛЕРТ не работает.


а вот этого всего в тз нет.
avatar

AM2

  • 6 апреля 2021, 21:02
0
Добавьте в него, пожалуйста, контроль по символу


что конкретно вы имели ввиду? :) 
avatar

AM2

  • 5 апреля 2021, 22:33
0
Как на скрине меньше 2.0 — покупка, больше 8.0 — продажа

непонятно
avatar

AM2

  • 5 апреля 2021, 22:28
0
добавил: www.opentraders.ru/downloads/1942/


extern int Count = 25;  // число поз
avatar

AM2

  • 5 апреля 2021, 22:04
0
входы какие будут?
avatar

AM2

  • 3 апреля 2021, 15:14
0
в этом топике за вас никто не поручился
avatar

AM2

  • 3 апреля 2021, 07:03