[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 636

 

Bonnes gens, de l'aide, je ne peux pas comprendre, TrailingStop ne fonctionne pas comme il se doit, si la transaction est ouverte sur le trall SELL fonctionne bien, mais si vous ouvrez BUY, puis pour une raison quelconque immédiatement modifié stopper. Où est l'erreur que je ne peux pas comprendre.... VOICI LE CODE :

extern int TP = 50 ;
extern int SL = 50 ;
extern int Trailing = 15 ;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Calculer le seuil de rentabilité ======
int i ;
double lotsBUY=0 ;
double lotsSEL=0 ;
double sumBUY=0 ;
double sumSEL=0 ;

pour (i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue ;
si (OrderSymbol()!=Symbol()) continuer ;
si (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots() ;
sumBUY=sumBUY+OrderLots()*OrderOpenPrice() ;
}

si (OrderType()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots() ;
sumSEL=sumSEL-OrderLots()*OrderOpenPrice() ;
}
}
double priceBUY=0 ;
si (lotsBUY!=0) priceBUY=sumBUY/lotsBUY ;
double priceSEL=0 ;
si (lotsSEL!=0) priceSEL=sumSEL/lotsSEL ;

//======== Position ouverte =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0) ;

si (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,0,Green) ;
si (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,0,Red) ;


//======= Trailing Stop =======

for(i = 0 ; i <= OrdersTotal() ; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;

si (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE) ;
}
}
si (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
retour(0) ;

}

Il y a un moment, si je change priceBUY en OrderOpenPrice() dans le bloc TrailingStop, cela fonctionne, mais j'ai besoin de suivre à partir du seuil de rentabilité, pas à partir du prix d'ouverture...... La vente fonctionne, mais l'achat, pour une raison quelconque, ne fonctionne pas. .... Je ne comprends pas où est l'erreur. .....SOS !!!!!!!!

 
Roman.:


Il ne s'agit pas d'une erreur - c'est un message indiquant que le solde minimum a été atteint - c'est-à-dire que le compte est épuisé - l'exécution est terminée et une nouvelle exécution est lancée avec un autre ensemble de paramètres d'entrée - voir les cases à cocher et les valeurs limites définies dans l'onglet Optimiser le testeur :

Merci !
 

Bon après-midi ! !! Mon EA rétracte les ordres avec cet endroit.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Mon EA semble avoir bien fonctionné auparavant, du moins jusqu'à ce que j'aie 2 à 5 commandes. Mais maintenant, j'ai autant de commandes que je veux - 20, 50 de chaque côté. En bref, il ne nettoie pas. Eh bien, deux, trois ou quatre fois oui, et puis soudainement non !

Je me demande comment cela se présente dans le testeur - en général, il supprime plusieurs commandes proches du prix, mais pas toutes ! Quel genre de déviations pouvons-nous envisager, inventer, imaginer, pour qu'elle se ferme sûrement ?

Vraiment, c'était bien avant. Il fermait, n'est-ce pas ? De quoi d'autre a-t-il besoin ? ? ????

 

Bonnes gens, de l'aide, je ne peux pas comprendre, TrailingStop ne fonctionne pas comme il se doit, si la transaction est ouverte sur le trall SELL fonctionne bien, mais si vous ouvrez BUY, puis pour une raison quelconque immédiatement modifié stopper. Où est l'erreur que je ne peux pas comprendre.... VOICI LE CODE :

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Il y a un moment, si je change priceBUY en OrderOpenPrice() dans le bloc TrailingStop, tout fonctionne, mais j'ai besoin d'un trailing stop à partir du seuil de rentabilité, pas du prix d'ouverture...... La vente fonctionne, mais l'achat, pour une raison quelconque, ne fonctionne pas. .... Je ne comprends pas où est l'erreur. .....SOS !!!!!!!!
 
MIR-ASOV:

Bonnes gens, de l'aide, je ne peux pas comprendre, TrailingStop ne fonctionne pas comme il se doit, si la transaction est ouverte sur le trall SELL fonctionne bien, mais si vous ouvrez BUY, puis pour une raison quelconque immédiatement modifié stopper. Où est l'erreur que je ne peux pas comprendre.... VOICI LE CODE :

Il y a un moment, si je change priceBUY en OrderOpenPrice() dans le bloc TrailingStop, tout fonctionne, mais j'ai besoin d'un trailing stop à partir du seuil de rentabilité, pas du prix d'ouverture...... La vente fonctionne, mais l'achat, pour une raison quelconque, ne fonctionne pas. .... Je ne comprends pas où est l'erreur. .....SOS !!!!!!!!

Essayez de sortir avec Print() la valeur priceBUY avant modification pour voir si elle répond aux attentes...
 
Essayez de sortir avec Print() la valeur de priceBUY avant modification pour voir si elle répond aux attentes...
Oui, j'ai vérifié, il correspond entièrement et complètement....... Essentiellement, le seuil de rentabilité pour BUY est égal au prix d'ouverture de l'ordre, mais pour une raison quelconque, cela ne fonctionne pas, je mets OrderOpenPrice() tout fonctionne, je mets priceBUY, no.......
 
il est fort probable que la variablepriceBUY soit nulle au moment de l'ouverture, donc Bid-priceBUY(0)==Bid, et donc
 
Dimka-novitsek:

Bon après-midi ! !! Mon EA rétracte les ordres avec cet endroit.

Mon EA semble avoir bien fonctionné auparavant, du moins jusqu'à ce que j'aie 2 à 5 commandes. Mais maintenant, j'ai autant de commandes que je veux - 20, 50 de chaque côté. En bref, il ne nettoie pas. Eh bien, deux, trois ou quatre fois oui, et puis soudainement non !

Je me demande ce que cela donne dans le testeur - il supprime plusieurs commandes proches du prix, mais pas toutes ! Quel genre de déviations pouvons-nous inventer, fantaisistes, pour être en mesure de les fermer sans faute ?

Vraiment, tout allait bien avant ? Il fermait, n'est-ce pas ? De quoi d'autre a-t-il besoin ? ? ????

Euh, ça ne va pas marcher.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Tant que l'ordre n'est pas clôturé, son OrderClosePrice est égal à 0, et à cet endroit vous devez substituer le prix réel auquel vous clôturez l'ordre, c'est-à-dire Ask en cas d'ordre SELL et Bid pour BUY.

 
alsu:

Eh bien, ça ne marche pas comme ça.

Jusqu'à ce que l'ordre soit fermé, son OrderClosePrice est égal à 0, et à cet endroit vous devez mettre le prix réel auquel vous fermez l'ordre, c'est-à-dire Ask en cas d'ordre SELL et Bid pour BUY.


Non,OrderClosePrice() pour un ordre qui n'est pas clôturé n'est pas égal à zéro - vérifier.OrderCloseTime() - oui
 
Merci ! !! Je vais essayer, je l'ai.
Raison: