
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
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
Più preciso sarebbe:
{
//действия с тикетом
}
OrderSend - "Restituisce il numero di biglietto assegnato all'ordine dal server commerciale o -1 in caso di fallimento ."
Anche se anche nel tester il primo numero di biglietto è 1, non 0.
Più precisamente, lo sarà:
{
//действия с тикетом
}
OrderSend - "Restituisce il numero di biglietto assegnato all'ordine dal server commerciale o -1 in caso di fallimento ."
Anche se anche nel tester il primo numero di biglietto è 1, non 0.
Così felice di vedere la scomparsa di Oksana ))
Sì, i biglietti iniziano con 1 nel tester e sul server DC, ma non ne prenderete mai 1 in DC. La tua versione non funziona del tutto, non è corretto confrontare la disuguaglianza con -1. E se il conto reale restituisce 1234567?
{
//действия с тикетом
}
// так верно
Così nel tester un biglietto non può essere meno di uno, ancora di più nel mondo reale
zero è inferiore a uno, entrambe le condizioni sono corrette, solo una per il confronto, l'altra per l'esclusione.
Anche se mi sono abituato a farlo:
int ticketbuy = OrderSend(sy,OP_BUY,ll,MarketInfo(sy,MODE_ASK),Slippage,0,0,Comments,mn,0,BuyColor);
if(ticketbuy<0)
Print(sy," OpenPosition. OrderSend Buy fail #",GetLastError());
else
Print(sy," OpenPosition. OrderSend Buy successfully");
Ma considerando il mio, le condizioni sono tutte corrette, solo la logica è diversa)
{
bool ret;
int error=0;
double price=0.0;
int total=OrdersTotal();
if(!disabled(_Symbol))
{
Print(rezult);
return;
}
for(int i=total-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS))continue;
if(OrderSymbol()!=_Symbol)continue;
if(OrderMagicNumber()!=Magic)continue;
if(OrderType()>1)continue;
if(OrderType()!=type)continue;
int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
if(OrderType()==OP_BUY)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),digits);
if(OrderType()==OP_SELL)price=NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),digits);
if(NormalizeDouble(NormalizePrice(OrderSymbol(),price),digits)!=price)continue;
ret=OrderClose(OrderTicket(),OrderLots(),price,Slippage,clrLawnGreen);
if(!ret)
{
error=GetLastError();
rezult=StringConcatenate(OrderSymbol(),": error close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType())," №- ",error," ",ErrorDescription(error));
Print(rezult);
}
else
{
rezult=StringConcatenate(OrderSymbol(),": close order ",OrderTicket()," ",DoubleToString(OrderLots(),2)," ",TypeToStr(OrderType()));
Print(rezult);
}
}
}
Potresti per favore dirmi cosa c'è di sbagliato in questo pezzo di codice?
Consiglio di cambiare la logica alla radice
Cioè è necessario tenere i registri degli ordini aperti - quante vendite e quanti baik sono aperti
E poi in base a queste considerazioni dovremmo gestire gli ordini - aprirli e chiuderli
Non so perché l'EA apre un sacco di ordini se la condizione non dovrebbe essere per l'apertura di una posizione, ma dopo l'apertura si apre di nuovo.
Non riesco a capire perché il mio EA apre molti ordini se non voglio che apra una posizione ma la riapre dopo che l'ho aperta, sospetto di avere qualcosa di sbagliato nel loop, non capisco bene i loop
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magico) // se la nostra magia
{
if(OrderType()==OP_BUY) sdel_b++; // conta bai
if(OrderType()==OP_SELL) sdel_s++; // Conta le vendite
if(OrderType()==OP_BUYSTOP) otl_b++; // Conta i bystops pendenti
if(OrderType()==OP_SELLSTOP) otl_s++; // Conta i sellstops pendenti
}
// ora ordini aperti
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Se è ora e non ci sono ordini pendenti
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //prendere una posizione
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Non so perché l'EA apre un sacco di ordini se la condizione non dovrebbe essere per l'apertura di una posizione, ma dopo l'apertura si apre di nuovo.
Non riesco a capire perché il mio EA apre molti ordini se non voglio che apra una posizione ma la riapre dopo che l'ho aperta, sospetto di avere qualcosa di sbagliato nel loop, non capisco bene i loop
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magico) // se la nostra magia
{
if(OrderType()==OP_BUY) sdel_b++; // conta bai
if(OrderType()==OP_SELL) sdel_s++; // Conta le vendite
if(OrderType()==OP_BUYSTOP) otl_b++; // Conta i bystops pendenti
if(OrderType()==OP_SELLSTOP) otl_s++; // Conta i sellstops pendenti
}
// ora ordini aperti
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0); // Se è ora e non ci sono ordini pendenti
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE); //prendere una posizione
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE); //
}
Prova questo
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Prova questo
sdel_s=0;
otl_b=0;
otl_s=0;
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if(OrderMagicNumber()==magic) // Если наш Меджик
{
if(OrderType()==OP_BUY) sdel_b++; // Считаем баи
if(OrderType()==OP_SELL) sdel_s++; // Считаем селы
if(OrderType()==OP_BUYSTOP) otl_b++; // Считаем отложенные байстопы
if(OrderType()==OP_SELLSTOP) otl_s++; // Считаем отложенные селлстопы
}
}
}
Apre ancora un sacco di ordini
Saluti. Buon anno a tutti!
Quando cerco di ottimizzare un EA dopo che è stato eseguito, i risultati e il grafico dell'ottimizzazione sono vuoti e il log è scritto nel registro:
Ci sono stati 2passaggifatti durante l'ottimizzazione, 2 risultati sono stati scartati come insignificanti
Deselezionare"algoritmo genetico" non aiuta. Capisco che i risultati sembrano insignificanti per il tester, ma come possiamo vedere cosa c'è? E questo nonostante il fatto che l'Expert Advisor non perde soldi per lo stesso periodo (un anno) durante i test, ma è +/- 20%.