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

 
Non ci sarà più di un ordine di acquisto alla volta?
 
dkfl.zrjdktdbx:
Grazie!!!

Ecco il link iniziale - poi il resto, IMHO.
 
Ivn:

Si prega di spiegare

La parte analitica utilizza un orizzonte temporale rigidamente definito. O tempi
 
Ok, ho un'idea, forse è un po' arrapante...
 int BUY;
 for( i=OrdersTotal();i>0;i--){OrderSelect(i-1,SELECT_BY_POS );if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==????){
if(OrderType( )==OP_BUY){BUY++;}}} 
   if ( BUY> stsBUY) {//Alert ("NashlY BUY " );
   for ( i=OrdersTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS );
if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYSTOP) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }

if( OrderMagicNumber( )==???? &&OrderSymbol()==Symbol()&&OrderType( ) ==OP_BUYLIMIT) {    
 OrderDelete(OrderTicket( ) ); 
  stsBUY=BUY;  Alert ("OrderDelete-OP_BUYSTOP",  GetLastError( ) );      }


}}
No, è solo che non è del tutto corretto, sembra che quando viene rilevato un ordine di acquisto tutti gli ordini pendenti vengano rimossi... Tutti gli ordini di acquisto. stsBUY dovrebbe essere impostato prima dell'inizio. Non ho controllato gli errori.
 
Vinin:

La parte analitica utilizza un orizzonte temporale rigidamente definito. O tempi

potresti per favore eliminare il "pesce" per il parsing, se hai qualche commento lo apprezzerei
 
dkfl.zrjdktdbx:
Ok, ho un'idea, forse è un po' arrapante... No, è solo che non è del tutto giusto, sembra che quando viene rilevato un ordine di acquisto, tutti gli ordini in sospeso vengono rimossi... Tutti gli ordini di acquisto. stsBUY dovrebbe essere impostato prima dell'inizio. Non ho controllato gli errori.


Avremmo bisogno di un codice più corretto. Nessun errore

E la logica è pessima.

 
Ivn:

Potresti per favore lasciar perdere il "pesce" per il parse, se hai qualche commento te ne sarei grato.

Dovresti almeno leggere un po' il libro di testo, in modo da non dover chiedere quanti "due volte due" sono.

 
FelixFX:

Dovresti almeno leggere un po' il libro di testo, così non devi chiedere quanto è "due volte due".


Non discuto che sia un punto importante, ma se lo capissi, non lo chiederei, giusto?

Cioè nell'algoritmo, dove sono specificati i timeframe negli indicatori, lo diciamo chiaramente.

Giusto?

allora spiegami quanto segue ....

Expert Advisor - incrocio di stocastico, entrata in un trade.

Ecco l'algoritmo

int start()
{
RefreshRates(); // Aggiorna i dati
Symb=Symbol();

x1=x;
y1=y;

x=iStochastic( NULL,0,5,3,3,MODE_SMA,1,0,0); // valore della linea principale stocastica sulla barra 0
y=iStochastic( NULL,0,5,3,3,MODE_SMA,1,1,0); // valore della linea del segnale stocastico sulla barra 0
Alert ("stocastico principale",x);
Alert ("segnale stocastico",y);

//---- intersezione delsegnale e della linea principale
if (y < x && y1> x1) // Check up pass
{
f=1 // flag up
}
//--------------------------------------------------------------------
if (y > x && y1< x1) // controlla il passaggio verso il basso
{
f=2; // flag down
}
//---- controlla l'intersezione verso il basso della linea principale con la linea 20
if (f==1 && x1<20&& x1<20 && x>= 20)
{ if (Ticket > 0) // se c'è un ordine, rimuovere l'ordine
OrderClose(Ticket,Lts,Bid,10);
SL=Bid - StopLoss*Point; // Calcolo di SL aperto
TP=Bid + TakeProfit*Point; // Calcolo del TP aperto.
Alert("Tentativo di aprire Buy. In attesa di risposta...");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 || !OrderSelect(Ticket, SELECT_BY_TICKET))
{

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,3,SL,TP);//open Buy
}

if (Ticket > 0) // Ha funzionato :)
{
Alert ("Opened Buy order ",Ticket);
return;
f=0; // reset flag
}

}
//---- controllare l'attraversamento della linea principale dall'alto al basso della linea 80
if (f==2 &&& x1>80 && x<= 80)
{ if (Ticket > 0)
OrderClose(Ticket,Lts,Ask, 10); // se c'è un ordine, rimuovere
SL=Ask + StopLoss*Point; // Calcolo di SL
TP=Ask - TakeProfit*Point; // Calcolo del TP aperto.
Alert("Tentativo di aprire Sell. In attesa di risposta...");
OrderSelect(Ticket, SELECT_BY_TICKET);
if(OrderCloseTime()>0 || !OrderSelect(Ticket, SELECT_BY_TICKET))
{
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Open Buy
}
if (Ticket > 0) // Ha funzionato :)
{
Alert ("Sell order opened ",Ticket);
return;
f=0; // zeroize flag
}

}


return(0);
}

se eseguiamo, l'Expert Advisor aprirà e chiuderà gli ordini entro mezz'ora, cioè aprirà alle 9.04, chiuderà alle 9.05, aprirà di nuovo alle 9.06, chiuderà alle 9.07 e così via, nella stessa direzione.

perché succede questo?

Saluti.

 
sss2019:
E se due ordini BUYLIMIT e BUYSTOP sono aperti, ho bisogno di cancellare BUYSTOP all'attivazione di BUYLIMIT e viceversa. Puoi dirmi come questa condizione può essere soddisfatta?

In realtà, la logica dovrebbe andare più o meno così:

1. Se ci sono due ordini pendenti e nessuna posizione, allora ricorda i tick di questi ordini pendenti nelle variabili.

2. Se c'è un SellStop pendente e non c'è un BuyStop pendente, se c'è una posizione Buy, confronta il ticket dell'ultima posizione Buy aperta con il ticket BuyStop ricordato.

Se sono uguali, significa che ByStop è stato convertito in Buy sul mercato --> se c'è un SellStop in sospeso, cancellalo. 3.

Se c'è un BuyStop pendente e nessun SellStop pendente, se c'è una posizione Sell, confronta il ticket dell'ultima posizione Sell aperta con il ticket SellStop ricordato.

Se sono uguali, allora il SellStop viene convertito in market Sell --> se c'è un BuyStop in sospeso - cancellalo.

Circa lo stesso... Questa è solo una logica approssimativa. Ha bisogno di funzioni.

 
Beh, mi dispiace, era solo una rapida... In realtà, sì, colpa mia, è il contrario. Dovrei, dovrei andare nella storia, trovare l'ultimo ordine e... и... No... non lo so davvero...