Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1308

 
Alexandr Sokolov:
Dove trovo il tempo di scadenza dell'ordine nel tester della strategia? La scheda delle colonne non ce l'ha
Come si imposta il tempo di scadenza?
 
MakarFX:
Come si imposta il tempo di scadenza?
void Open_Order(ENUM_ORDER_TYPE  Type,
                double           price,
                double           sl_price,
                double           tp_price,
                datetime         close)
  {
   
   MqlTradeRequest  request;
   MqlTradeResult   result;
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action        = TRADE_ACTION_PENDING;
   request.magic         = id_number;
   request.symbol        = _Symbol;
   request.volume        = volume;
   request.price         = price;
   request.sl            = sl_price;
   request.tp            = tp_price;
   request.deviation     = slippage;
   request.type          = Type;
   request.type_filling  = ORDER_FILLING_FOK;
   request.type_time     = ORDER_TIME_SPECIFIED;
   request.expiration    = close;
   
   if(!OrderSend(request,result)) Print("Error - ",result.retcode);
   
  }


 
Alexandr Sokolov:


Aggiungete un commento sul mandato, non vedo altre opzioni(
 
MakarFX:
Aggiungendo al commento sull'ordine, non vedo altre opzioni(

Grazie

 
Questo è il mio primo commento sul forum e non sono particolarmente familiare con la comunità, quindi non tiratemi troppi pomodori. Al punto. Quando stavo scrivendo il mio EA ho affrontato il problema che OrdersTotal() funziona (il che ha senso) per tutti gli ordini aperti e nel caso di impostare le condizioni per "un ordine chiuso, il successivo aperto" sono stato sorpreso di scoprire che anche se ho impostato i master in condizioni e codice duplicato, due o più EA su grafici aperti sul mio conto non si lasciano lavorare contemporaneamente (finché un ordine è chiuso, un altro non si apre). Ho cercato in molti posti sull'argomento - ho ottenuto molte soluzioni e come ho capito è elementare, ma in tutti i casi, niente ha funzionato. Quale condizione devo impostare quando apro e/o chiudo "if... (...) " per rendere unico OrdersTotal solo per uno specifico EA che è allegato e l'altro (il suo OrdersTotal) non sarebbe collegato in alcun modo e manterrebbe il proprio conteggio di tutti gli ordini. Grazie.
 
Порт-моне тв:
Questo è il mio primo commento sul forum, non ho particolare familiarità con la comunità, quindi non tiratemi pomodori. Al punto. Quando stavo scrivendo il mio EA ho affrontato il problema che OrdersTotal() funziona (il che ha senso) per tutti gli ordini aperti e sono stato sorpreso di scoprire che anche se imposto un master nelle condizioni e copio il codice, due o più EA su grafici aperti allo stesso tempo non si lasciano lavorare a vicenda (finché un ordine non viene chiuso, il prossimo non si apre). Ho cercato in molti posti sull'argomento - ho ottenuto molte soluzioni e come ho capito è elementare, ma in tutti i casi, niente ha funzionato. Quale condizione devo impostare quando apro e/o chiudo "if... (...) " per rendere unico OrdersTotal solo per uno specifico EA che è allegato, e l'altro (il suo OrdersTotal) non sarebbe collegato in alcun modo e manterrebbe il proprio conteggio di tutti gli ordini. Grazie.

Allega il tuo codice e ti verranno segnalati gli errori

 
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#proprietà link "https://www.mql5.com"
#proprietà versione "1.00"
#proprietà rigorosa

extern int Magic = 6477;
extern double Lot = 0,01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone, //prezzo di apertura della prima candela
Opentwo, //prezzo di apertura della seconda candela
Closeone, //prezzo di chiusura della prima candela
Closetwo, //la scena della seconda candela
Lowone, //il prezzo minimo della prima candela
Lowtwo, //il prezzo della prima candela
Lowthree, //la scena del minimo della terza candela
Openthree, //prezzo di apertura di una terza candela
Closethree, //prezzo di chiusura della terza candela
CloseOrder, //chiude l'ordine
Highone, //prezzo massimo della prima candela
Hightwo, //il prezzo massimo della seconda candela
Highhree, //il prezzo massimo della seconda candela
Highfour, //il prezzo è il massimo della seconda candela
Highfive, //prezzo di un massimo di una seconda candela
Highsix, //prezzo della seconda candela massima.
Highseven, //prezzo della seconda candela massima
Highheight, //prezzo di un massimo di una seconda candela
Lowfour, //il prezzo del minimo della quarta candela
Lowfive, //primo prezzo di una quinta candela
Lowsix, //la scena del minimo di una sesta candela
Lowseven, //la scena di un minimo di una settima candela
Loweight, //la scena del minimo dell'ottava candela
Closefour, //il prezzo di chiusura della quarta candela
Openfour,
Basso15,
Basso25,
SLbuy, TPbuy, SLsell, TPsell, //prezzo di apertura della quarta candela
OrderOpenPrice;
int ticket, ticketclose;

//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Funzione di deinizializzazione dell'esperto |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| funzione tick esperto |
//+------------------------------------------------------------------+
void OnTick()
{
//--- determinare i prezzi delle barre necessarie
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
doppio LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
doppio UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
doppio MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5);
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5);
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);

//-------------функции---------------------------------------

se ( Ask>0 && Bid >0)
{

se (Totale ordini()<1)
se (Close[1]>Open[1])
if(Orsi < -0,00035 && MedioBB > Chiedi)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
se(OrdiniTotali()==1)
if(Bulls > 0,00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
ChiudereBuyPositions1();
}





//---- fine della funzione
}
//---------------------------------------------------------------------
void ChiudereAcquistoPosizioni1()
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES);
stringa CurrencyPair=OrderSymbol();
se(_Symbol==CurrencyPair)
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL);
}
}
}




 
 int OrderOfSymbol=CounterOrderTradeType(-1);
 
//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
Порт-моне тв:
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+

OrdersTotal() restituisce l'importo totale di tutte le posizioni e gli ordini in Metatrader 4

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == iMagicNumber)
            if(OrderSymbol() == Symbol())
              {

               }

In questo modo puoi separare gli ordini per un MedgX e un simbolo...

 

@MakarFX, grazie.... Ricevo questi errori durante la compilazione

'CounterOrderTradeType' - funzione non definita test per molti expt trade.mq4 48 19

'CounterOrderTradeType' - le dichiarazioni di funzione sono permesse solo nello scopo globale, nello spazio dei nomi o nella classe test per molti expt trade.mq4 141 5


MakarFX
MakarFX
  • www.mql5.com
Добавил тему Окно модификации Доброго времени суток. В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации. Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер. Уважаемые Профи Добавил тему Нужен индикатор. Кто может написать такое? Я уже...