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

 
rustein:
Hanno cercato nel forum ma non hanno trovato una soluzione rapida, aiutare a risolvere il problema con mentre in tester non funziona, nella vita reale sì.

Grazie.

Se blocca il tester, allora dovrebbe farlo. (Assicurati di descrivere l'uscita dall'anello).

Come questo

    while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }
 
drknn:


È difficile dire quale sia il suo problema. Prendete come regola in MQL4 che i numeri negativi nel codice devono sempre essere messi tra parentesi. A volte possono verificarsi errori senza parentesi.

Anche se, nelle linee di codice che iniziano con extern, prendere valori negativi tra parentesi non è necessario. Non so perché sia così.

Grazie, ma non funziona, puoi suggerire un costrutto per eliminare il ciclo if(IsTesting()==true || IsOptimization()==true)
 
rustein:
Grazie, ma non funziona, puoi suggerire un costrutto per eliminare il ciclo if(IsTesting()==true || IsOptimization()==true)

 while(Result == -1)
    {
      if(TotalOpenOrders() < TotalOrders)
      {
        if(TrendDetection() == BULL)
        {
          Result = OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask,Digits)-(StopLoss*Point),NormalizeDouble(Ask,Digits)+(TakeProfit*Point),OrderComments,Magic,0,CLR_NONE); 
         if((IsTesting()||IsOptimization())&&Result == -1)break;
        }

^^

 
drknn:
Non ha bisogno di un avviso - la mia comprensione è che da qualche parte nel codice il file è probabilmente già aperto ma non chiuso. Questo è probabilmente il motivo per cui il file non può essere riaperto e la finestra di avviso continua ad apparire. Anche se forse mi sbaglio - non sono un membro del club dei telepati :(
La situazione è la seguente: ad un certo momento, l'esperto guarda nel file csv e vede quale comando c'è (comprare, vendere, chiudere), questo comando viene scritto nel file da EXCEL. Il problema è che al momento, quando expert leggerà il file, che può essere aperto da EXCEL, ekspert darà un errore e questo è tutto, e ho bisogno che vada di nuovo e provi finché non legge il comando.
Non sapevo della costruzione...
Per favore controllate se ho scritto correttamente:
 
int init()
{
mentre(handle<1)
{ 
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t') 
} 

}

 
sanches83:

}

Sì, perché chiedere, si può testare con una "lotta" )).
 
rustein:
Grazie, ma non funziona, puoi suggerire un costrutto per eliminare il ciclo if(IsTesting()==true || IsOptimization()==true)


Provate senza alcun ciclo, diciamo così:

double  PR,SL,TP;
PR=NormalizeDouble(Ask,Digits);
SL=NormalizeDouble(PR-StopLoss*Point,Digits);
TP=NormalizeDouble(PR+TakeProfit*Point,Digits);
int Result=0;
Result = OrderSend(Symbol(),OP_BUY,Lots,PR,Slippage,SL,TP,OrderComments,Magic,0,CLR_NONE);
if(Result<=0){
        Print("Ошибка № ",GetLastError()," при открытии бай-ордера. PR = ",PR,"   SL = ",SL,"   TP = ",TP);
}

Aiuterebbe almeno a capire perché la posa non si apre.

 
costy_:

^^

Molte grazie :)

Grazie a tutti, l'ho aggiustato e funziona.

Molte grazie per il vostro aiuto.

 
costy_:
Sì, perché abbiamo bisogno di chiedere, possiamo verificarlo "combattendo" )).


In generale questo è corretto, ma per farlo funzionare abbiamo bisogno di inizializzare la variabile prima del ciclo

maniglia=0;

mentre(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Beh, è solo per essere assolutamente sicuri che l'esecuzione del codice entrerà nel corpo del ciclo e non lo ignorerà.

 
drknn:


In realtà è vero, ma perché funzioni, la variabile dovrebbe essere inizializzata prima del ciclo

maniglia=0;

mentre(handle<1)
{
handle=FileOpen("firstfile.csv",FILE_CSV|FILE_READ|FILE_WRITE,'\t');
}

Questo è per assicurarsi che l'esecuzione del codice entri nel corpo del ciclo e non lo ignori.

Sì, purtroppo devo essere come un indovino, creare script con parte del codice sulla domanda, bene o tutto il codice e sarà più facile per voi indicare l'errore. (fondi di caffè zakAchyVeTso).
 

Gente, aiutatemi un po'!!!

Sto cercando di scrivere un EA utilizzando la strategia del canale del mattino. L'essenza è questa: alle 6:01 sulla coppia EURGBP determiniamo il canale di movimento del prezzo dalle 0 alle 6 del mattino. Impostiamo due ordini pendenti e se l'ordine pendente attivato viene chiuso da uno stopper, apriamo un ordine nella direzione opposta. È la seconda parte della strategia che non funziona. Cioè, se uno stop è scattato, non possiamo aprire un ordine nella direzione opposta.
File: