Demandez ! - page 31

 
if (FirstRun==1) {

FirstRun=0;

prevtime=Time[0];

}

if ((prevtime == Time[0]) && (CurTime()-prevtime)>MaxTradeTime) {

NewBar=0;

}

else {

prevtime

Je l'ai trouvé ! Je le ferai à l'avenir - Nous apprenons avec l'aide d'autres personnes qui ont plus de connaissances et de sagesse que nous dans les domaines où nous manquons de compréhension ! Merci beaucoup !

Dave <<<
 

for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)

OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);

if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(OrderOpenPrice()-Ask>=TrailingStop*Point)

{

if(OrderStopLoss()>Ask+Point*15||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))

{

if(Bid-OrderOpenPrice()>=TrailingStop*Point)

{

if(OrderStopLoss()<Bid-Point*15 ||OrderStopLoss()==0)

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit

}

return(0);

}

return(0);

}

}

Avec le bon format maintenant, est-ce que l'un de vous, très généreux codeurs, pourrait m'aider à résoudre ce problème de SL et TP ci-dessus. Revenons à ma demande initiale. Mon programme de veille désactive l'EA à différents moments. L'EA a créé des transactions ouvertes avant la mise en veille avec un Stop Loss de 40 - 50 pip et un Take Profit de 100. Juste avant que l'EA ne soit mis en veille, je veux que le Stop Loss sur chaque ticket ouvert passe à 15 pips, et que le Take Profit passe à 25 pips. Le stoploss ne doit pas être un trailing stop, mais un stop dur en dessous (achat) ou au-dessus (vente) de son prix de trading actuel (de même que le Take Profit). Prêtez-moi votre expertise et faites-moi plaisir !

 

Pour les trailingstops, utilisez la fonction suivante. Je pense qu'elle est écrite d'une manière qui peut être comprise facilement. Parfois, les geeks de la programmation écrivent du code, qui peut être efficace pour une fraction de milliseconde, mais qui rend le travail difficile à lire et à déboguer.

void TrailingAlls(int start,int stop)

{

int profit;

double stoptrade;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=NormalizeDouble((Bid-OrderOpenPrice())/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Bid-(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=NormalizeDouble((OrderOpenPrice()-Ask)/Point,0);

if(profit<start)

continue;

stoptrade=OrderStopLoss();

stopcal=Ask+(stop*Point);

if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);

}//Shrt

}

}//for

}

Appelez-le dans votre démarrage en utilisant ce qui suit :

TrailingAlls(TrailStartPips,TrailStopPips) ;

 

Maji, dans mon code (qui est faux). Je ne veux pas de trailing stops. Je veux juste que les tickets ouverts soient modifiés de façon à ce que chaque achat et vente ouverts aient un stop loss de 15 pips et un take profit de 25 pips par rapport au prix actuel de la devise.

J'ai besoin qu'il recherche ce qui est ouvert en rapport avec le symbole de la devise, puis qu'il modifie le stop loss et le take profit sur chaque transaction ouverte. C'est tout ce dont j'ai besoin.

Hier soir, nous avons pris la tangente et avons abordé les trailing stops - Malentendu entre moi et Phoenix.

S'il vous plaît aidez-moi à accomplir cette fonction pas trop difficile - Pour vous c'est-à-dire !

Dave <<<
 

Dave,

Je pense que les ingrédients pour faire ce changement sont là dans la routine que je t'ai donnée.

Sinon, vous devrez poster votre code ou me l'envoyer par e-mail et je verrai ce que je peux faire. Parfois, il est très difficile de lire le code des autres, ce qui peut prendre beaucoup de temps. Dans ce cas, je lève les bras.

Bonne chance.

 

Le post #309 est mon code tel qu'il est, en PHP.

J'ai juste besoin de changer les trades ouverts en stop loss hard de 15 et en take profit hard de 25. Cela ne devrait pas être trop difficile pour un pro comme vous de modifier ce codage.

Dave <<
 

Dave,

Comme je l'ai dit, cela prend beaucoup de temps de faire ce genre de modifications. Je m'amuse à l'heure du déjeuner et voici un essai. Si cela ne fonctionne pas, vous êtes sur votre propre. Ce n'est pas testé, donc...

Appelez ceci dans votre programme principal juste avant de demander au programme de se mettre en veille.

Bonne chance.

void ChangeStop(int takeprofit,int stop)

{

double profit;

double stopcal;

if(stop==0)

return;

int trade;

for(trade=OrdersTotal()-1;trade>=0;trade--)

{

if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))

continue;

if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)

continue;

if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY)

{

profit=Ask+(takeprofit*point);

stopcal=Bid-(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Blue);

}//Long

if(OrderType()==OP_SELL)

{

profit=Bid-(takeprofit*point);

stopcal=Ask+(stop*Point);

OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,profit,0,Red);

}//Shrt

}

}//for

}

 

Où a lieu la modification dans ce cas ? Le stop loss initial était de 40, et le take profit de 100. Dans le cadre de la mise en veille, le stop loss passe à 15 sur tous les ordres ouverts existants et le take profit passe à 25 sur tous les ordres ouverts existants.

Tickets d'ordres ouverts : Avant le mode veille.

Avant le mode sommeil Stop Loss - 40 Avant le mode sommeil Take Profit-100 Après le mode sommeil Modification du Stop Loss -15 Après le mode sommeil Modification du Take Profit - 25

Je ne suis pas en train d'initialiser les paramètres des ordres, je modifie des ordres existants déjà placés et toujours actifs.

Merci quand même pour votre aide ! Pourquoi quelque chose d'aussi simple semble-t-il si difficile ?

Dave <<
 

Dave,

Ce n'est pas difficile. Vous devrez étudier MQ un peu plus. Vérifiez le code que je vous ai fourni. Les paramètres, stop et takeprofit devraient être les nombres que vous voulez utiliser.

Tout est là, vous devez trouver comment l'utiliser.

 

Je jette l'éponge. J'obtiens des erreurs. Je vais utiliser ce que Phoenix a fourni parce que cela fonctionne à un point avec lequel je peux vivre. Si cette langue avait une école pour apprendre aux États-Unis, cela me faciliterait la vie. Malheureusement, il n'y en a pas.

Merci pour votre contribution, à la fois Maji et Phoenix !

Dave <<<