[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 476

 
Se ne avete bisogno, posterò anche la jma. Cambia il nome dell'indicatore in JMA[i]
File:
jmaxvib.mq4  11 kb
 
for(i = 0; i < limit; i++)
     {
       if(dBuffer[i+1]>80 && dBuffer[i]<80) DN[i] = 70; Fd=-1; Fu=0;               //пересекла 80   --> 1
       if(dBuffer[i+1]<20 && dBuffer[i]>20) UP[i] = 30; Fu=1;  Fd=0;               //пересекла 20   --> 1
       
       if(dBuffer[i+1]>rsi[i+1] && dBuffer[i]<rsi[i]) dn[i] = 60; fd=-1; fu=0;     //пересечение двух  -->  2
       if(dBuffer[i+1]<rsi[i+1] && dBuffer[i]>rsi[i]) up[i] = 40; fu=1;  fd=0;     //пересечение двух     -->  2
       
       if(Fd==-1 && fd==-1) dot[i]=90; Fd=0; Fu=0; fd=0; fu=0;
       if(Fu==1 && fu==1)   dot[i]=10; Fd=0; Fu=0; fd=0; fu=0;

Si passa attraverso le barre dal tempo attuale al tempo passato.

L'array viene cercato fino all'ultimo.

Pertanto, tutte le variabili daranno valori per il caso più recente (in questo caso - molto tempo fa).

Pertanto, è necessario fare una ricerca dal passato al presente.

for(i = limit; i >= 0; i--)
E le variabili
int fd, fu,Fd, Fu;

dichiarare al livello superiore, cioè prima di Start e Init.

E non c'è bisogno di azzerarli a Start. Lasciare l'azzeramento solo nel luogo in cui li avete fatti azzerare

if(Fd==-1 && fd==-1) dot[i]=90; Fd=0; Fu=0; fd=0; fu=0;
       if(Fu==1 && fu==1)   dot[i]=10; Fd=0; Fu=0; fd=0; fu=0;
 
rlx Grazie, Vce funziona.
 
PapaYozh:


In primo luogo, OrderSend() si verifica 2 volte lì, ed entrambe le volte al di fuori della condizione che hai specificato.

In secondo luogo, il prezzo non normalizzato viene passato a OrderSend().

In terzo luogo, analizzare il risultato restituito dalla funzione OrderSend(), scrivere un messaggio nel log in caso di errori quando si apre/modifica/chiude l'ordine e analizzare il log.


Qualcuno può postare la versione corretta di Experrement 1?
 

Buon pomeriggio!

Grazie per le vostre risposte - siete stati molto utili ))))

Ragazzi! L'Expert Advisor effettua operazioni quando si incrociano due muwings. E quando si incrociano, chiude i trade e apre nella direzione opposta, perdendo profitti.

1. Come faccio a scrivere che chiude gli accordi quando le linee hanno appena iniziato a convergere? E non avrebbe aperto un nuovo accordo nella stessa direzione, ma ha aspettato fino a quando si incrociano nella direzione opposta?

2. o chiudere un trade quando il r.c.i. incrocia il livello 80 verso il basso in acquisto, e il livello 20 verso il basso in vendita. e quando si chiude un trade, quando le condizioni sono soddisfatte, non si apre un trade nella stessa direzione, ma si aspetta che si incrocino nella direzione opposta?

Se ci sono thread simili sul forum, per favore datemi un link!

Molte grazie in anticipo!

Buon commercio!

Scambi redditizi!

 

Ciao a tutti!

Per favore, ditemi cosa significa questo:

Ordine di acquisto ...... fallito [timeout del trade]

Specificamente interessato a cosa sia questo timeout

 
smartemiy:

Buon pomeriggio!

Grazie per le vostre risposte - siete stati molto utili ))))

Ragazzi! L'Expert Advisor effettua operazioni quando si incrociano due muwings. E quando si incrociano, chiude i trade e apre nella direzione opposta, perdendo profitti.

1. Come faccio a scrivere che chiude gli accordi quando le linee hanno appena iniziato a convergere? E non avrebbe aperto un nuovo accordo nella stessa direzione, ma ha aspettato fino a quando si incrociano nella direzione opposta?

2. o chiudere un trade quando il r.c.i. incrocia il livello 80 verso il basso in acquisto, e il livello 20 verso il basso in vendita. e quando si chiude un trade, quando le condizioni sono soddisfatte, non si apre un trade nella stessa direzione, ma si aspetta che si incrocino nella direzione opposta?

Se ci sono thread simili sul forum, per favore datemi un link!

Molte grazie in anticipo!

Buon commercio!

Scambi redditizi!


https://www.mql5.com/ru/code ha un magazzino pieno di simili
 
Un'altra domanda: quale funzione può essere usata per estrarre il costo per punto di utensile?
 
PapaYozh:


In primo luogo, OrderSend() si verifica 2 volte lì ed entrambe le volte al di fuori della condizione che hai specificato.

Tuttavia, non voglio essere una spina nel fianco.

if(OrdersTotal()>0&&tral>0&&OrderMagicNumber()==MAGIC&&(OrderType()==OP_SELL||OrderType()==OP_BUY)){
     if(ObjectFind(NamePrice)==-1)
      {
        ObjectCreate(NamePrice,OBJ_HLINE,0,0,Ask);
        ObjectSet(NamePrice,OBJPROP_COLOR,LineColor);
      }
      double n= ObjectGet( NamePrice, OBJPROP_PRICE1); 
      double p1= ObjectGet( NamePrice1, OBJPROP_PRICE1);
      double p2= ObjectGet( NamePrice2, OBJPROP_PRICE1);
//....................................................................... 
      double d= AccountEquity()-AccountBalance();                 
       if(ObjectFind(NamePrice1)==-1&&d>0)
      {       
        ObjectCreate(NamePrice1,OBJ_HLINE,0,0,n+d*Point*10);
        ObjectSet(NamePrice1,OBJPROP_COLOR,LineColor1);
      }
      if(n+d*Point*10>p1)ObjectSet(NamePrice1,OBJPROP_PRICE1,n+d*Point*10);
      if(ObjectFind(NamePrice2)==-1&&n+d*Point*10<p1)
      {       
        ObjectCreate(NamePrice2,OBJ_HLINE,0,0,n+d*Point*10);
        ObjectSet(NamePrice2,OBJPROP_COLOR,LineColor2);
      } 
      if(p2!=n+d*Point*10)ObjectSet(NamePrice2,OBJPROP_PRICE1,n+d*Point*10);  
      if(nb+ns==2&&tral<20&&p1-p2>=(p1-n)/tral&&p2>n&&p2-n>dohod*Point/10)CloseALL(); 
      if(nb+ns==2&&tral>20&&p1-p2>=tral*Point&&p2>n)CloseALL();  
      }
//..........................................................................
    if(ob==0||OrderOpenTime()<iTime(Symbol(),TF,0))
       { 
     
      if( R==1&&zb==0&&C1>O1&&iVolume(Symbol(),TF,0)<2)
         {
         if(ob==0||OrderOpenTime()<iTime(Symbol(),TF,0))
         {
         OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+dist*Point,3,0,0,"ko",MAGIC,TimeCurrent()+60*experation,Green);
         }
         }
      
      }
    if(os==0||OrderOpenTime()<iTime(Symbol(),TF,0))
        {      
      if(R==1&&zs==0&&C1<O1&&iVolume(Symbol(),TF,0)<2)
        {        
         if(os==0||OrderOpenTime()<iTime(Symbol(),TF,0))
         {
         OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-dist*Point,3,0,0,"ko",MAGIC,TimeCurrent()+60*experation,Red);
         }
         }
      return(0);
     }
   

   
  }

Spiegatemi come si apre un ordine se OrderTotal() è zero.

Grazie.

 

Per favore, ditemi quale codice dovrebbe essere scritto nell'EA per fare in modo che l'EA scambi solo una volta all'ora

Per esempio, l'EA si è attivato, un ordine è aperto (non mi interessa oltre), vorrei che l'ordine non si aprisse sulla barra corrente su un timeframe orario

tutto assomiglia a questo

int hh;
int CurrentHour;
CurrentHour=TimeHour(TimeCurrent());
if (CurrentHour!=hh)
{
OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-3*Point,Bid+3*Point);
hh=TimeHour(TimeCurrent());
}

ma ho innumerevoli ordini aperti