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

 
Vitaly Muzichenko:
Devi ordinare per prezzo, perché non puoi cercare per dimensione, la griglia può essere diversa, e troverai o il più grande o il più piccolo, ma non il primo e non l'ultimo

Intendo la funzione che ha postato Marina.

L'ultimo ordine è determinato dal tempo.

 
Alekseu Fedotov:

Intendo la funzione che ha postato Marina.

L'ultimo ordine è determinato dal tempo.

Sono stati piazzati tutti nello stesso momento, quindi con 14 ordini ci potrebbe essere una differenza di 1 secondo, e non si può ordinare per tempo, solo per prezzo.
 
Marina Korotkih:

Perché io lo riassumo così

GetOrderOpenPrice(Symbol(),OP_SELLSTOP,_Magic)
Capito.
 

Cari programmatori! Aiutami a risolvere questa domanda. L'Expert Advisor entra in un trade su M15, ma prende le condizioni anche da H1. Quando le condizioni su H1 sono soddisfatte su M15 ci possono essere diversi punti di ingresso. In realtà il problema è che voglio utilizzare solo il primo punto di ingresso, fino a quando le condizioni su H1 non sono invertite.

k=0;
for (i=OrdersTotal()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // acquisto

 
customer03:

Cari programmatori! Aiutami a risolvere questa domanda. L'Expert Advisor entra in un trade su M15, ma prende le condizioni anche da H1. Quando le condizioni su H1 sono soddisfatte su M15 ci possono essere diversi punti di ingresso. In realtà il problema è che voglio limitare il primo punto di entrata, fino a quando le condizioni su H1 non sono cambiate al contrario.

k=0;
per (i=OrdiniTotali()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // acquisto

Ma cosa succede senza il codice? In particolare, il codice non è chiaro.

Cosa vuoi esattamente? Non in astratto, ma esattamente quello che vuoi ottenere.

 
customer03:

Cari programmatori! Aiutami a risolvere questa domanda. L'Expert Advisor entra in un trade su M15, ma prende le condizioni anche da H1. Quando le condizioni su H1 sono soddisfatte su M15 ci possono essere diversi punti di ingresso. In realtà il problema è che voglio limitarmi al primo punto di entrata, mentre su H1 le condizioni non cambiano al contrario.

k=0;
per (i=OrdiniTotali()-1;i>=0;i--)
{
RefreshRates();
if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
}


if( stM1 <= 20 && stM0 > 20 && stH0 > 70 && k==0 && opp != Time[0]) // acquisto

Un algoritmo approssimativo:

bool flag = false;
bool flagH1 = true;
bool flagM15 = true;

if(!flag && flagH1 && flagM15)
{
  flag = true;
}

if(!flagH1 && flag)
flag = false;
 
Artyom Trishkin:

E senza il codice? Una ragione in più per non capire il codice.

Cosa vuoi esattamente? Non in astratto, ma esattamente quello che vuoi ottenere.

L'obiettivo è limitare l'entrata su M15 a uno (primo segnale) finché c'è un segnale su H1.
#property strict
extern double    Lot= 0.1;

extern int    stoploss=20;
extern int takeprofit=50;
// если stoploss и / или takeprofit = 0, то отключены.
//if stoploss and/or takeprofit = 0, are disconnected.



extern int  Magic = 99999999;
// уникальный номер, кот. советник метит свои ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными
extern int Slipp = 1;        
// величина максимально возможного проскальзывания.
//  slippage
extern int sec = 2000;
// количество миллисекунд сна советника между повторами отправки торгового поручения в случае неудачи
// number of milliseconds sleep of the EA between repetitions of sending a trade assignment in case of failure


//============================= Stochastic
input int InpKPeriod=13; // K Period
input int InpDPeriod=3; // D Period
input int InpSlowing=3; // Slowing

//============================= Stochastic
input int InpKPeriod1=13; // K Period
input int InpDPeriod1=3; // D Period
input int InpSlowing1=3; // Slowing





int A, a, b, i, ii, o;


    double SL, TP, op, stH0, stH1, stM0, stM1;
    bool c;
    datetime OldTime, Time0, opp;

int init()
  {    
  
   OldTime = iTime(NULL,Period(),0);
  
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  

                      
//====================================================================

stH0 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,0);
stH1 = iStochastic(NULL,60,InpKPeriod,InpDPeriod,InpSlowing,MODE_EMA,1,MODE_MAIN,1);

stM0 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,0);
stM1 = iStochastic(NULL,15,InpKPeriod1,InpDPeriod1,InpSlowing1,MODE_EMA,1,MODE_MAIN,1);
  
//====================================================================  

          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }

      
if(  stM1 <= 20 && stM0 > 20  && stH0 > 70  && b==0   && opp != Time[0]) // покупка
      {
       opp = Time[0];

    RefreshRates();
    op = Ask;
   A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
    o = GetLastError();
         while (A < 0 && o != 4109 && o != 132 && o != 133)
         {
          Print("Error =", o);
         Sleep(sec);
         RefreshRates();
         op = Ask;
         A = OrderSend (Symbol(), OP_BUY, Lot, Ask, Slipp, 0, 0, NULL, Magic, 0, Blue);
         o = GetLastError();
        }      
        
SL = op-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;        
        
    if (SL != 0 || TP != 0)
      {
    RefreshRates();
    if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
    c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
    o = GetLastError();
      while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  o = GetLastError();
                  }  }          
     }

//---------------------------------------------------------------------------------------------------------+                          
b=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        if(OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) a = 0;
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) b++;
       }


if( stM1 >= 80 && stM0 < 80  &&  stH0 < 30   && b==0   && opp != Time[0]) // продажа
     {
     opp = Time[0];

      RefreshRates();
      op = Bid;
         A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
         o = GetLastError();
            while (A < 0 && o != 4109 && o != 132 && o != 133)
            {
             Print("Error =", o);
            Sleep(sec);
            RefreshRates();
            op = Bid;
            A = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, 0, 0, NULL, Magic, 0, Red);
            o = GetLastError();
            }    

SL = op+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = op-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;
        
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         o = GetLastError();
         while (c == false && o != 4109 && o != 132 && o != 133)
                  {
                   Print("Error =", o);
                  Sleep(sec);
                  RefreshRates();
                  if(OrderSelect (A, SELECT_BY_TICKET) == true) a = 0;
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);                  
                  o = GetLastError();
                  } }
      }
      
    

   return(0);
   }      

  
//+------------------------------------------------------------------+
 
customer03:
L'obiettivo è limitare l'entrata su M15 a uno (primo segnale) finché c'è un segnale su H1.

Quindi controlla il numero di posizioni aperte sulla candela M15 null. Se hai già una posizione ed è aperta su una candela M15 null, allora non aprirne altre.
 

Salve, cari membri del forum. C'è un modo per impostare il valore del trailing stop integrato in Metatrader4 dall'interno dell'EA? Sono interessato a questo e non ad aggiungere all'EA un codice per l'esecuzione di un trailing stop che sia indipendente dal trailing stop integrato.

Grazie in anticipo per le risposte.

 
Dr_G:

Salve, cari membri del forum. C'è un modo per impostare il valore del trailing stop integrato in Metatrader4 dall'interno dell'EA? Sono interessato a questo e non ad aggiungere all'Expert Advisor il codice per l'esecuzione di un trailing stop che sia indipendente dal trailing stop integrato.

Grazie in anticipo per le risposte.

No.
Motivazione: