Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
bool order= 0;
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
La tua doppia dichiarazione di biglietto.
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
La dichiarazione di ticket nasconde ... blah blah ? vedi che sono il compilatore umano.
Rimuovi il secondo int .
Ho messo
bool order e
int ticket
su variabili globali, e il resto del codice su OnTick, ma ancora non fa alcuna voce ora
Non compilato, non testato
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Marco: Ho rimosso l'int duplicato, ma ora nessun trade è fatto, ho bisogno di 1 trade, se prezzo> nuvola ichimoku, quel codice prima era grande, ma ha continuato a creare nuovi trade se
il prezzo era sopra la nuvola, ho solo bisogno di aiuto per codificare in modo che lo script si fermi dopo il 1 trade.
Honest Knave: ho provato il tuo codice, ho solo definito magic_no che mancava, funziona bene, aspetta che il nuovo trade tocchi nuovamente la nuvola, sarà davvero utile per i prossimi progetti, ma
ho solo bisogno che si fermi dopo il 1º trade, cosa devo fare?
Grazie a tutti per il vostro aiuto
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Questo è il problema.
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>-1)
{
order=1;
}
}
}
}
Quindi provate questo e l'ho fatto notare qualche post indietro.
Notate anche che OrderSend restituisce o il numero del biglietto, o -1 meno uno se fallisce.
Honest Knave: ho provato il tuo codice, ho appena definito magic_no che mancava, funziona bene, aspetta un nuovo trade se il prezzo tocca di nuovo la nuvola, sarà davvero utile per i prossimi progetti, ma
ho solo bisogno che si fermi dopo la 1 trade, cosa devo fare?
Grazie a tutti per il vostro aiuto
Non dovrebbe fare più di 1 trade...? Questo è ciò che fa:
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Onesto Fante:
Il tuo EA è fantastico, ma crea nuovi trade se il prezzo scende di nuovo alla nuvola ichimoku e poi torna su. Non ripete gli ordini nella stessa candela, come il problema che avevo, e imparerò molto da questo esempio che mi hai dato, per creare nuovi
EA, ma ho bisogno di un modo per codificare che dopo il primo scambio, l'EA o lo script si chiuderà immediatamente, quindi ho solo bisogno di 1 scambio mai fatto.
Marco: Ho provato il tuo nuovo aggiornamento, ma non fa nessun trade, ho messo proprio il modo in cui hai postato per ultimo, solo rimosso il secondo int, nel ticket. Ma il primo trade non viene mai fatto su strategy tester, cosa fare ora?
Onesto Fante:
Il tuo EA è fantastico, ma crea nuovi trade se il prezzo scende di nuovo alla nuvola ichimoku e poi torna su. Non ripete gli ordini nella stessa candela, come il problema che avevo, e imparerò molto da questo esempio che mi hai dato, per creare nuovi
EA, ma ho bisogno di un modo per codificare che dopo il primo scambio, l'EA o lo script si chiuderà immediatamente, quindi ho bisogno solo di 1 scambio mai fatto.
Non capisco cosa intendi.
Quel codice non può aprire più di 1 ordine alla volta.
Ma se l'ordine si chiude e il trigger si ripete, ne aprirà un altro.
Vuoi dire che vuoi che venga aperta una sola operazione alla volta?
Non capisco cosa vuoi dire.
Quel codice non può aprire più di 1 ordine alla volta.
Ma se l'ordine si chiude e il trigger si ripete, ne aprirà un altro.
Vuoi dire che vuoi che venga aperto un solo ordine alla volta?