[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 77

 

Ciao a tutti

Si prega di consigliare, perché scoop compra, ma quando le condizioni sono mature non chiude la posizione

/---- parametri di ingresso
extern int PerRSI=8;
extern int MagicNamber=77771;
extern double Lots=1.0;
//+------------------------------------------------------------------+
int start()
{
int
cnt, // indice dell'ordine
biglietto, // numero di identificazione dell'ordine
totale; // numero di ordini già aperti
doppio
rsi_0, // Valore. rsi_0 corrente
rsi_1; // Valore. rsi_1 1a barra
se (Bars<100)
{
Stampa("barre inferiori a 100");
ritorno(0);
}
total=OrdersTotal();
se(totale<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Barra corrente
rsi_1=iRSI(NULL,0, PerRSI,0,1); // barra corrente più 1

if(rsi_0 < rsi_1 && rsi_0 < 30) // Se la linea ha attraversato 30
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Stampa("Ordine SELL aperto : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
for(cnt=0;cnt<totale;cnt++)
{
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // è una posizione aperta? OP_BUY o OP_SELL
{
if(OrderType()==OP_BUY) // posizione lunga aperta
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // se la linea ha attraversato 70
{
OrderClose(OrderTicket(),1,Bid,3,Violet); // chiudere la posizione

return(0); // uscire
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Stampa("Ordine SELL aperto: ",OrderOpenPrice())
}


Che diavolo è questo? A cosa serve OrderSelect()?


Il resto è difficile da capire perché il codice è disposto senza rientri e non si possono seguire le parentesi - non voglio rovinarmi la visione.

 
Come faccio a decolorare il grafico per mostrare il movimento del bordo di uscita?
 
anat писал(а) >>

Grazie mille per tutto il vostro aiuto! E anche a condor - y. Ora c'è un altro problema. Abbiamo, per esempio, aperto 10 posizioni di acquisto. Quando chiudiamo 1, 2, 3, ecc. posizioni usando stop o take, l'Expert Advisor inizia a comprare, se c'è un segnale di acquisto. Ma ho bisogno che TUTTI gli ordini vengano chiusi prima, e poi, quando non ci sarà più nessuna posizione aperta, inizierà un nuovo ciclo di trading. In altre parole, abbiamo bisogno di un contatore. Prima apre le posizioni a un dato numero e poi, quando le posizioni sono chiuse, a zero. Vorrei ringraziare in anticipo.

È esattamente il modo in cui si fa ora. Finché c'è almeno un ordine aperto, non se ne aprirà un altro. Se vuoi fare diversamente, devi essere più preciso. Poi devi scegliere - se i tuoi ordini sono aperti se ci sono posizioni aperte o no.

 

Ecco una domanda:

Ci sono strumenti di debugging in MetaTrader?

Per favore, condividete le vostre esperienze - come fate il debug degli script e degli EA?

Si tratta di cifre, parametri, visioni di algoritmi e così via. Come si catturano i bug nell'algoritmo?

 
Ryan_ryan >> :

Ecco una domanda:

Ci sono strumenti di debugging in MetaTrader?

Per favore, condividete le vostre esperienze - come fate il debug degli script e degli Expert Advisors?

Se ho bisogno di fare il debug, lo faccio attraverso Print()

Ma nella maggior parte dei casi tale necessità non si presenta.

 

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Potete dirmi perché in questo progetto dopo la chiusura di un ordine suona prima "timeout.wav", "no error" uguale al numero di ordini da chiudere (se si chiudono 2 ordini, "no error" apparirà due volte, ecc.) e poi suona "money.wav". La cosa divertente è che questo è solo per i trade brevi, per i trade lunghi tutto funziona bene. Chi sa qual è il trucco e come risolverlo?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Potete dirmi perché in questo progetto dopo aver chiuso un ordine suona prima "timeout.wav", "no error" uguale al numero di ordini da chiudere (se si chiudono 2 ordini, "no error" apparirà due volte, ecc.), e poi suona "money.wav". La cosa divertente è che questo è solo per i trade brevi, per i trade lunghi tutto funziona bene. Chi sa qual è il trucco e come risolverlo?

La staffa non è dopo la prima se chiusa?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Questa linea cade in qualche modo.

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

Potete dirmi perché in questo progetto dopo aver chiuso un ordine suona prima "timeout.wav", "no error" uguale al numero di ordini da chiudere (se si chiudono 2 ordini, "no error" apparirà due volte, ecc.), e poi suona "money.wav". La cosa divertente è che questo è solo per i trade brevi, per i trade lunghi tutto funziona bene. Chi sa qual è il trucco e come risolverlo?


La condizione nel primo operatore "if" condizionale ha effetto solo sull'operatore successivo che lo segue (la linea successiva).

Gli altri vengono eseguiti SENZA che l'ordine venga chiuso. Cioè, anche se non c'è un comando per chiudere l'ordine, uno dei suoni funzionerà.

Il modo corretto è questo:

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()== mnum) 
  {
     bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
     if ( sellclose) 
        PlaySound("money.wav");
     else 
     {
        Print("Ошибка : ", Error(GetLastError()));
        PlaySound("timeout.wav");  
     }
  }
 
infinum13 >> :

La parentesi non è chiusa dopo il primo se?

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

Questa linea in qualche modo non si chiude.

Se(OrderType()==OP_SELL && OrderMagicNumber()==mnum, allora cade, ma funziona il trucco per le transazioni brevi e lunghe, ma l'errore "No error" con suono "timeout.wav" funziona solo per gli scambi brevi, per gli scambi lunghi funziona bene, ci sono le stesse parentesi e tutto è lo stesso