Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
..........
ticket=OrderSend(.....);//приказ и запоминаем тикет ордера
if(ticket>0)//открылась
{
//действия с тикетом
}
Plus précis serait :
{
//действия с тикетом
}
OrderSend - "Renvoie le numéro de ticket attribué à l'ordre par le serveur commercial ou -1 en cas d'échec ."
Bien que même dans le testeur, le premier numéro de ticket est 1, et non 0.
Plus exactement, elle le sera :
{
//действия с тикетом
}
OrderSend - "Renvoie le numéro de ticket attribué à l'ordre par le serveur commercial ou -1 en cas d'échec ."
Bien que même dans le testeur, le premier numéro de ticket est 1, et non 0.
Je suis si heureux de voir la disparition d'Oksana !)
Oui, les tickets commencent par 1 dans le testeur et sur le serveur DC, mais vous n'aurez jamais 1 dans DC. Votre version ne fonctionne pas tout à fait, il n'est pas correct de comparer l'inégalité avec -1. Et si le compte réel renvoie 1234567 ?
{
//действия с тикетом
}
// так верно
Ainsi, dans le testeur, un ticket ne peut être inférieur à un, et encore plus dans le monde réel.
zéro est inférieur à un, les deux conditions sont correctes, une seule pour la comparaison, l'autre pour l'exclusion.
Bien que je me sois habitué à le faire :
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");
Mais en considérant le mien, les conditions sont toutes correctes, seule la logique est différente).
{
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);
}
}
}
Je vous souhaite une bonne année ! Pourriez-vous me dire ce qui ne va pas avec ce bout de code ?
Je conseille de changer la logique à la racine
Il est nécessaire de tenir un registre des ordres ouverts - combien de ventes et combien de bakchichs sont ouverts.
Et ensuite, sur la base de ces considérations, nous devons gérer les ordres - les ouvrir et les fermer.
Je ne sais pas pourquoi l'EA ouvre beaucoup d'ordres si la condition ne devrait pas être d'ouvrir une position, mais après l'ouverture, il ouvre à nouveau.
Je ne comprends pas pourquoi mon EA ouvre de nombreux ordres, si je ne veux pas qu'il ouvre une position, mais il ouvre à nouveau après l'ouverture. Je pense que je me trompe peut-être avec la boucle, je ne comprends pas vraiment les boucles.
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // si notre Magie
{
if(OrderType()==OP_BUY) sdel_b++ ; // compter bai
if(OrderType()==OP_SELL) sdel_s++ ; // Compter les sels
if(OrderType()==OP_BUYSTOP) otl_b++ ; // Compter les bystops en attente.
if(OrderType()==OP_SELLSTOP) otl_s++ ; // Comptez les sellstops en attente.
}
// commandes en cours
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0) ; // Si c'est l'heure et qu'il n'y a pas d'ordres en attente
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE) ; //prendre une position
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE) ; //
}
Je ne sais pas pourquoi l'EA ouvre beaucoup d'ordres si la condition ne devrait pas être d'ouvrir une position, mais après l'ouverture, il ouvre à nouveau.
Je ne comprends pas pourquoi mon EA ouvre de nombreux ordres, si je ne veux pas qu'il ouvre une position, mais il ouvre à nouveau après l'ouverture. Je pense que je me trompe peut-être avec la boucle, je ne comprends pas vraiment les boucles.
for(int i=OrdersTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==magic) // si notre Magie
{
if(OrderType()==OP_BUY) sdel_b++ ; // compter bai
if(OrderType()==OP_SELL) sdel_s++ ; // Compter les sels
if(OrderType()==OP_BUYSTOP) otl_b++ ; // Compter les bystops en attente.
if(OrderType()==OP_SELLSTOP) otl_s++ ; // Comptez les sellstops en attente.
}
// commandes en cours
if(Hour()==00 && Minute()==01 && otl_b==0 && otl_s ==0) ; // Si c'est l'heure et qu'il n'y a pas d'ordres en attente
{
OrderSend (Symbol(),OP_BUYSTOP,lot,Vhod1,20,SL2,TP,NULL,magic,0,clrNONE) ; //prendre une position
OrderSend (Symbol(),OP_SELLSTOP,lot,Vhod2,20,SL,TP2,NULL,magic,0,clrNONE) ; //
}
Essayez ceci
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++; // Считаем отложенные селлстопы
}
}
}
Essayez ceci
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++; // Считаем отложенные селлстопы
}
}
}
Ouvre toujours beaucoup de commandes
Salutations. Bonne année à tous !
Lorsque j'essaie d'optimiser un EA après son exécution, les résultats et le graphique d'optimisation sont vides et le journal est écrit dans le journal :
Il y a eu 2passagespendant l'optimisation, 2 résultats ont été écartés car non significatifs.
décocher"algorithme génétique" ne sert à rien. Je comprends que les résultats semblent insignifiants pour le testeur, mais comment pouvons-nous voir ce qui est là ? Et ce, malgré le fait que le conseiller expert ne perd pas d'argent pour la même période (un an) pendant les tests, mais qu'il en perd +/- 20%.