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

 
Dimka-novitsek:
Quando l'EA non inizia nulla, è solo per controllare se i nuovi ordini non si aprono ad ogni tick
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

Questo è il tuo codice, non ho fatto alcuna modifica

Hai scritto che l'ordine sarà effettuato se si seleziona l'ordine del tiket order e il simbolo magico, e il numero totale di ordini è inferiore a 2.

 
Grazie!!! Mi dispiace, e sicuramente ho scritto cose senza senso.
 
drknn:


Senza il codice è difficile dirlo. È abbastanza possibile che l'EA sia scritto per quattro cifre, ma il conto demo è a cinque cifre. Capite che se impostiamo, per esempio, uno stop loss di 10 pip, allora questa è la stessa distanza per un EA a cinque cifre e 1 pip per uno a quattro cifre. Se impostiamo la distanza minima consentita per impostare gli ordini stop a, diciamo, 3 punti, allora su un mercato a cinque cifre questo sarebbe di trenta punti invece di tre. Il server rifiuterà comprensibilmente il comando di impostare un ordine con uno stop di 10 punti alle cinque cifre.

Ma la ragione potrebbe essere diversa. Vedete, avete chiesto alla gente perché la loro auto non parte. La gente non sarà in grado di dirvi la ragione senza aprire il cofano e ascoltare come l'auto reagisce ai tentativi di avviamento...

Ho cercato di eseguire un tester di strategia per EURUSD e di eseguirlo per diverse valute, EURUSD, GBPUSD, USDJPY, ma non ha funzionato. Ho usato Point per inviare ordini di acquisto/vendita, quindi dovrebbe funzionare per tutti i simboli. Quello che non capisco è perché il tester mostra i risultati, ma l'EA non apre posizioni su un conto demo. In quali casi questo può accadere?

Comunque grazie per la risposta, posterò il codice in serata.

 
Dimka-novitsek:


Mi scusi, ho scritto delle sciocchezze qui, se potesse mostrarmi dove sono completamente pecoreccio.

Tutti: )))))))))))))))))))

Cominciamo dall'inizio:

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

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

Inizialmente due variabili sono inizializzate con zero:

int      tiket, tikett;

allora la prima linea di codice è dove selezioniamo l'ordine dei biglietti:

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

qui la variabile biglietto è zero. Cioè, cerchiamo di selezionare un ordine con un biglietto zero. Così facendo, non abbiamo nemmeno letto l'aiuto, dato che il parametro pool viene ignorato quando si seleziona per ticket, e si specifica ancora MODE_TRADES. Questo non è un errore - è un parametro extra in questo caso che viene semplicemente ignorato. Di conseguenza, l'ordine con un biglietto zero non viene selezionato - non esiste...

Tutto va avanti nelle condizioni annidate; la prima condizione è:

if(OrderSymbol()==Symbol())

... Se il simbolo dell'ordine selezionato corrisponde al simbolo del grafico corrente... E poiché non è stato scelto alcun ordine, arriveremo tranquillamente all'uscita da start() senza fare nulla.

Vi posso assicurare... Più avanti avete non meno interessante, ma... Non è interessante curiosare.

Inizia con la ricerca di posizioni già aperte o ordini pendenti che sono stati impostati.

Buona fortuna.

 
ilunga:

questo è il tuo codice, non ho fatto alcuna modifica

Hai scritto che gli ordini saranno effettuati se si seleziona l'ordine tiket del simbolo dato e l'ordine magico dato e ci sono meno di 2 ordini in totale.


Ah, no, è vero, quando si avvia un ordine inferiore a due, vengono piazzati due ordini pendenti, e al prossimo tick ce ne sono due e non succede niente.

Devo avere una specie di crisi nella mia testa.

 
Dimka-novitsek:


Ah, no, è vero, quando si avvia un ordine inferiore a due, vengono piazzati due ordini pendenti, e al prossimo tick ce ne sono due e non succede niente.

Devo avere una specie di crisi nella mia testa.

Vi ho già detto passo per passo dove avete una crisi...
 
Sersad:

Ho eseguito un tester di strategia su EURUSD, ho provato a eseguirlo su diverse valute, EURUSD, GBPUSD, USDJPY - non ha funzionato da nessuna parte. Ho usato Point per inviare ordini di acquisto/vendita, quindi dovrebbe funzionare per tutti i simboli. Quello che non capisco di più è perché il tester mostra i risultati, ma l'EA non apre posizioni su un conto demo. In quali casi questo può accadere?

Comunque, grazie per la risposta, posterò il codice in serata.


Il punto è che il valore del punto è diverso.

 
PapaYozh:


Questo è il punto: il valore del punto varia.

Il valore del punto varia da quotazione a quotazione, ma la sua essenza è la stessa per tutte le quotazioni con qualsiasi numero di decimali - è il passo minimo del prezzo.

Ecco perché il fatto che io abbia usato per uno stop-loss, per esempio, Ask-30*Point invece di Ask-0.003 nega il commento di drknn.

"È abbastanza possibile che l'EA sia scritto in quattro cifre, mentre il conto demo è in cinque cifre. Vedete, se impostate, per esempio, un ordine stop loss di 10 punti, è la stessa distanza su un EA a cinque cifre che 1 pip su uno a quattro cifre. Se impostiamo la distanza minima consentita per impostare gli ordini stop a, diciamo, 3 punti, allora su un mercato a cinque cifre questo sarebbe di trenta punti invece di tre. È chiaro che il server rifiuterebbe semplicemente il comando di impostare un ordine con uno stop di 10 punti...".

double Point - Dimensione del punto dello strumento corrente nella valuta della quotazione.
 

Un consiglio.

Ho scritto un semplice script per produrre il valore del livello minimo di stop loss/stake profit in pip.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}

Uscite zero. È un valore standard per questo parametro?

 

fx_max:

Ho scritto un semplice script che produce il valore del livello minimo consentito di stop loss/stake profit in pip.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

Emette zero. È un valore standard per questo parametro?


no