Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 370

 
Ekburg, ok
 
Ekburg:


Installare l'ultima build nel terminale, è più facile scrivere codice in esso, meno probabilità di fare errori, lo consiglio!)

Corretta la parte che è stata inviata per prima, senza l'ultima parte delle parentesi, che non sono chiare perché...


Questa è la mia uscita dall'EA, se tutte le condizioni sono soddisfatte allora l'EA è uscito

cioè

fail=true;

e poi

if(fail) return(0);

 
SpikeOne:


sono io che esco dall'EA, se tutte le condizioni sono soddisfatte allora l'EA è uscito

cioè

fail=true;

e poi

if(fail) return(0);


Questo è comprensibile, ma nel codice che è stato inviato all'inizio, ci sono molte parentesi inutili prima della funzione di output).

Quello che ho mandato ha aiutato?!

 
se ( AccountProfit()+ AccountBalance()>=740)
{
for(int zx=OrdersTotal(); zx+1>=0; zx--)
{
if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
OrderDelete(OrderTicket());
}
mentre (OrdiniTotali()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
se(risultato!=TRUE)
{
er=GetLastError();
Print("LastError = ",er, ",Symbol());
}
altrimenti er=0;
}
}
fail=true;
}

if(fail) return(0);

Se inserite il mio codice nell'EA https://www.mql5.com/ru/code prima del posto

if(or_bu==rischio && tick_b==0) open(0)

if(or_sl==rischio && tick_s==0) open(1);

allora l'EA inizia a commerciare in modo diverso, anche se nel mio codice dovrebbe entrare solo dopo che ho digitato 740, inizialmente il mio saldo è 700 nel tester.

I valori per i test possono essere impostati come segue:

extern bool test=false; //spegnere gli oggetti al test

extern int prof=2; // livello di profitto

extern int int chag=1.7; // passo tra gli ordini

extern int risk=0; //livello di rischio

extern double lot = 0.01; // lotto iniziale

extern double k_lot=2; // incremento di volume

extern double lot_max=100;

risultato bool;

bool fail=false;

Il problema è che si scambia in modo diverso, non riesco a capire la data in cui ho fatto il test nel 2013. 11. 08. и 2013. 11 .09.

 
SpikeOne:

poi l'EA inizia a commerciare in modo diverso, anche se nel mio codice dovrebbe entrare solo dopo aver digitato 740, inizialmente il mio saldo è 700 nel tester.


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

Prova a compilare il mio codice, fammi sapere il risultato, poi ci penseremo...

se entra in questo codice prima del necessario, allora il problema è nell'operatore iniziale, vediamo cosa c'è di sbagliato

 
Ekburg:

Prova a compilare il mio codice, fammi sapere il risultato, poi ci penseremo...

Se inserisce questo codice prima del necessario, allora il problema è nell'operatore di avvio, vediamo cosa c'è di sbagliato lì


Sì, l'ho compilato, ma il problema persiste.... Sembra che entri nel codice prima del dovuto.
 
SpikeOne:

sì compilato, ma il problema rimane.... Sì, sembra che vada nel codice prima, anche se non dovrebbe.

AccountProfitRestituisce il valore dell'utile per il conto corrente nella valuta di base.

Questo è il problema credo, si vuole sapere il profitto in sterline e ritorna in euro, per esempio

Provate a sostituire l'intero calcolo della prima frase del codice con questo:

AccountEquityRestituisce l'importo del patrimonio netto per il conto corrente. Il calcolo del capitale dipende dalle impostazioni del server commerciale.

e alla fine compilare questo operatore:

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

AccountProfitRestituisce il valore dell'utile per il conto corrente nella valuta di base.

Questo è il problema che penso, vuoi sapere il profitto in sterline e ti ritorna in euro, per esempio

Provate a sostituire l'intero calcolo della prima frase del codice con questo:

AccountEquityRestituisce l'importo del patrimonio netto per il conto corrente. Il calcolo del capitale dipende dalle impostazioni del server commerciale.

e alla fine compilare questo operatore:


Il problema sembra essere diverso, se inserisco in un EA che non funziona correttamente, codice che funziona correttamente, poi dopo la compilazione l'EA non funziona correttamente, sembra come quando si apre una pagina nel browser, e ti dà la cache ogni volta.

Anche se si crea un nuovo EA e vi si inserisce un codice funzionante, per qualche motivo funziona male.

 
SpikeOne:


...se inserisco del codice che funziona male in un EA che funziona correttamente, dopo la compilazione l'EA non funziona correttamente...


Non posso aiutarti in questo) devi passare attraverso l'intero EA.
 
Ekburg:

Non posso aiutare allora) Ho bisogno di passare attraverso l'intero EA.


Mi sembra di aver trovato un bug=) i dati iniziali dove il passo tra gli ordini è impostato su int e ho messo 1.7, l'ho cambiato in doppio e ha funzionato bene=)

Motivazione: