[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 229

 
si prega di consigliare perché le transazioni non si aprono.... Il codice sembra avere senso, ma non si apre.
 
//+------------------------------------------------------------------+ 
  //| MACD ^^^.mq4 | 
  //| Copyright © 2011, MetaQuotes Software Corp. | 
  //| http://www.metaquotes.net | 
  //+------------------------------------------------------------------+ 
  #property copyright "Copyright © 2011, MetaQuotes Software Corp." 
  #property link "http://www.metaquotes.net" 

  extern int TP = 100; 
  extern int TS = 100; 
  extern int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

 int total; 
 int ticket; //объявил тотал и тикет 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
                if(ticket>0) 
                { 
                    OrderSelect(ticket,SELECT_BY_TICKET); 
                    Print("открылись на покупку по цене:", OrderOpenPrice()); 
                } 
                else 
                { 
                    Print("открыться не удалось по причине:", GetLastError()); 
                    return(0); 
                } 
         }
         if(MACD < 0)
         {
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
               if(ticket>0) 
               { 
                   OrderSelect(ticket,SELECT_BY_TICKET); 
                   Print("открылись на продажу по цене:", OrderOpenPrice()); 
               } 
               else 
               { 
                   Print("открыться не удалось по причине:", GetLastError()); 
                   return(0); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

Questo è un punto che non riesco a mettere insieme, aiutatemi a creare:

Ho bisogno di definire un punto zero sul profitto di due o più ordini aperti in una direzione, per esempio per comprare.

e aggiungere il take profit a questo punto e assegnarlo a tutti gli ordini di acquisto aperti.

E il take profit dovrebbe essere mostrato sul grafico, cioè dovrebbe essere visibile.

Per esempio, al prezzo di 1500 apriamo il primo ordine di acquisto

a 1600 apriamo il secondo ordine di acquisto.

il loro punto zero è a 1550 + (Take Profit = 20)

e qui il primo e il secondo ordine sono dati un take profit di 1570, quando il prezzo raggiunge questo livello, entrambi gli ordini saranno chiusi,

e se il prezzo passa (salta) questo livello, seguirà e chiuderà gli ordini.

È molto importante tenere le registrazioni degli ordini di acquisto e di vendita simultaneamente e non interferire l'uno con l'altro. Si dovrebbe impostare il take profit separatamente per l'acquisto e il take profit separatamente per la vendita, e solo quando due o più ordini sono aperti in una direzione allo stesso tempo.

 
CLAIN:
per favore consigliate perché le transazioni non si aprono.... Il codice sembra avere senso, ma non si apre.
Perché OrdesTotal() non restituisce mai un valore negativo.
 
Grazie, buon punto.... corretto... ma gli scambi non si aprono ancora.... cosa fare?
 
CLAIN:
Grazie, buon punto.... corretto... ma gli scambi non si aprono ancora.... cosa fare?


Probabilmente correggere la funzione signal_MACD().

Beh, che alla fine avrebbe restituito qualcosa.

 

Salve.

Potete dirmi se ho scritto correttamente le condizioni? (I parametri Fractal_point_up_buy e Fractal_point_down_buy sono normalizzati).

Grazie in anticipo.

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

Questo è un punto che non riesco a mettere insieme, aiutatemi a creare:

Ho bisogno di definire un punto di profitto zero per due o più ordini aperti in una direzione, per esempio comprare.

e aggiungere il take profit a questo punto e assegnarlo a tutti gli ordini di acquisto aperti.

E il take profit dovrebbe essere mostrato sul grafico, cioè dovrebbe essere visibile.

Per esempio, al prezzo di 1500 apriamo il primo ordine di acquisto

a 1600 apriamo il secondo ordine di acquisto.

il loro punto zero è a 1550 + (Take Profit = 20)

e qui il primo e il secondo ordine sono dati un take profit di 1570, quando il prezzo raggiunge questo livello, entrambi gli ordini saranno chiusi,

e se il prezzo passa (salta) questo livello, seguirà e chiuderà gli ordini.

È molto importante tenere le registrazioni degli ordini di acquisto e di vendita simultaneamente e non interferire l'uno con l'altro. Si dovrebbe impostare il take profit separatamente per l'acquisto e il take profit separatamente per la vendita, e solo quando due o più ordini sono aperti in una direzione allo stesso tempo.


Per una posizione aperta a 1500, un take a 1570 andrebbe bene (se non si tiene conto dello StopLevel), ma per una posizione aperta a 1600, un take a 1570 causerebbe un errore di 130 - stop sbagliato. Dopo tutto, un Take non può essere inferiore al prezzo di apertura di un Buy. Questo è già uno StopLoss.
Per due posizioni avete definito il vostro punto di pareggio, ma per tre-quattro-cinque?
Dovresti prima definire la formula di pareggio per le posizioni unidirezionali, e poi puoi creare una logica.
 
nemo811:

Salve.

Potete dirmi se ho scritto correttamente le condizioni? (I parametri Fractal_point_up_buy e Fractal_point_down_buy sono normalizzati).

Grazie in anticipo.

Salve.

Se tutte le variabili sono dichiarate, non vedo errori nella sintassi di MQL4...

Qual è il problema?

 
,
artmedia70:
Per una posizione aperta a 1500, un take a 1570 andrebbe bene (se non si tiene conto dello StopLevel), ma per una posizione aperta a 1600, un take a 1570 causerebbe un errore di 130 - stop sbagliato. Dopo tutto, un Take non può essere inferiore al prezzo di apertura di un Buy. Questo è già uno StopLoss.
Per due posizioni avete definito il vostro punto di pareggio, ma per tre-quattro-cinque?
Dovresti prima definire la formula di Breakeven per le posizioni unidirezionali, e poi puoi elaborare la logica.

Tutto dipende da quando impostiamo o cambiamo il Take Profit. Si basa sul prezzo corrente.
Motivazione: