Comment coder ? - page 319

 
Tomcat98:
Bonjour les codeurs,

Comment coder quelques lignes supplémentaires pour qu'un Expert s'arrête après un trade gagnant ?

Les pips sont dans le sac, alors faites les stops Expert...

Merci beaucoup

Tomcat98

Voir ci-dessous si vous avez une certaine expérience du codage. Sinon, faites appel à un codeur.

1) après chaque clôture de transaction, faites une boucle dans OrdersHistoryTotal() pour vérifier les transactions.

2) Vérifiez la clôture de la dernière transaction ( OrderCloseTime() ).

3) si la dernière transaction a eu lieu, vérifiez OrderProfit() == profit.

Si profit == vrai, définissez EndDayTrade == true && LastTradeDay == DayofYear().

Si dans le profit == faux, mettez EndDayTrade == false.

4) Lorsque le programme passe par start(), vous devrez insérer ==> if EndDayTrade == false avant de commencer toute nouvelle transaction. Puisque c'est vrai, alors cela ne déclenchera pas de nouvelles transactions.

5) Vous aurez besoin d'une fonction de minuterie pour vérifier le nouveau jour. (en supposant que le nouveau jour est ce que vous voulez pour déclencher de nouvelles transactions).

La forme la plus simple serait if (LastDay != DayofYear() ).

6) dans la fonction de temporisation ci-dessus, définissez LastDay = DayofYear().

si ( LastTradeDay != DayofYear() && EndDayTrade == true)

définissez EndDayTrade == false, ce qui recommence tout.

Variables définies par l'utilisateur

bool EndDayTrade = false ;

int LastTradeDay = 9999999 ;

int LastDay = 999999 ;

J'espère que cette explication est assez claire.

 
dasio:
Bonjour,

J'essaie de fusionner ces deux codes mais j'ai du mal à le faire.

J'ai besoin que lorsqu'un ordre en attente est exécuté, l'autre doit être annulé.

Merci de votre disponibilité

int opened =0;

int pending =0;

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

Quelqu'un peut m'aider ?

 

dasio

Essayez de placer ce code au début de la procédure start(). Vous devrez probablement en filtrer quelques-uns lorsque vous ouvrirez des ordres en attente, mais si vous placez ce code au début, il nettoiera les ordres en attente si l'un des ordres en attente ouverts auparavant devient un ordre "normal".

dasio:
Quelqu'un peut vous aider ?
 

Bonjour,

J'apprends beaucoup de ce fil, c'est pourquoi je continue à poser des questions.

Maintenant. J'essaie de le faire seul mais je n'ai pas réussi.

Je veux utiliser cet indicateur dans un graphique renko hors ligne.

Mon but est de tracer au-dessus ou en dessous de la bougie Combien de temps a fait la construction.

Je sais que dans la spécification de la bougie, il y a le moment où elle s'est ouverte. Donc si je fais le temps de la bougie actuelle moins la bougie de la précédente j'ai ce dont j'ai besoin.

Alors comment je peux le coder ?

Merci beaucoup.

 

Je n'arrive pas à comprendre pourquoi ce code essaie de modifier des ordres fermés.

J'ai ajouté OrderCloseTime() aux deux instructions if en pensant que cela mettrait fin à cette erreur de ticket invalide pour la fonction ordermodify, mais de temps en temps, mon EA perd le contrôle de tous les ordres et, d'une manière ou d'une autre, se mêle à une transaction fermée et essaie continuellement de la modifier, créant d'énormes fichiers journaux et ne continuant pas à trader à moins que je ne redémarre le MT4. Je ne suis pas exactement sûr de la façon dont il récupère un ordre fermé, peut-être pendant qu'il est en train de modifier tous les ordres, l'un d'eux se ferme dans ce court laps de temps et le déstabilise ? Comme je l'ai dit, cela se produit peut-être deux fois sur 30 à 50 transactions par jour.

Quelqu'un a-t-il une idée sur la façon de mettre fin à cela ?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Problèmes de signal

mladen

Je suis très content d'avoir trouvé une solution à ce problème, mais je n'ai pas trouvé de solution à ce problème, et je n'ai pas trouvé de solution à ce problème.

Mastercash:
Mladen Merci, j'ai regardé de près....Im encore expérimenter le code.Je vais être notifié quand à travers.
 

...

2 pensées :

1. Si vous voulez l'envoyer, je pense que le seul moyen raisonnable est d'envoyer du courrier et dans ce cas, pourquoi n'utilisez-vous pas simplement l'un des programmes de spamming qui existent dans la nature ?

2. L'envoi de signaux pose trop de problèmes (c'est mon avis, certains des problèmes liés à l'envoi sont pratiquement insolubles). Alors pourquoi ne pas inverser la logique : au lieu d'envoyer des signaux, créez un code qui sera lu (avec le nom d'utilisateur, le mot de passe, etc...) à partir d'un emplacement donné et de cette façon, vous aurez résolu presque tous les problèmes que l'envoi ne peut pas résoudre (y compris la prévention de l'utilisation de plusieurs IP en même temps).

Donc, juste quelques réflexions ...

Mastercash:
mladen Merci beaucoup le code fonctionne maintenant.l'alerte ne se répète plus.s'il vous plaît je veux héberger un script qui sera l'envoi d'alertes de négociation à plusieurs destinataires, comme des centaines d'entre eux, comment puis-je faire cela ... Y at-il des entreprises qui peuvent gérer que vous ou quelqu'un sur ce forum savoir.
 

Essayez quelque chose comme ceci :

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

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

{

if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
J'ai ajouté OrderCloseTime() aux deux instructions if en pensant que cela mettrait fin à cette erreur de ticket invalide pour la fonction ordermodify, mais de temps en temps, mon EA perd le contrôle de tous les ordres et, d'une manière ou d'une autre, y mêle une transaction fermée et essaie continuellement de la modifier, créant d'énormes fichiers journaux et ne continuant pas à trader à moins que je ne redémarre le MT4. Je ne suis pas exactement sûr de la façon dont il récupère un ordre fermé, peut-être pendant qu'il est en train de modifier tous les ordres, l'un d'eux se ferme dans ce court laps de temps et le déstabilise ? Comme je l'ai dit, cela se produit peut-être deux fois sur 30 à 50 transactions par jour.

Quelqu'un a une idée sur la façon de mettre fin à cela ?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

Solutions d'alerte

Je pense que j'ai besoin de plus d'explications sur ce sujet, pouvez-vous juste me donner un indice sur la façon d'écrire et de mettre en place un code qui m'aidera à envoyer l'alerte à tous mes clients en même temps. Est-ce en stockant leur adresse e-mail dans la base de données..... mais comment le langage du serveur, par exemple, script php, recueillir les alertes de la plate-forme mt4 automatiquement ? ...... Je pense que c'est le problème, s'il peut y avoir un moyen, il peut être envoyé à plusieurs téléphones mobiles ou adresse e-mail.Votre conseil, s'il vous plaît ?

mladen:
2 idées :

1. Si vous allez l'envoyer, alors je pense que le seul moyen raisonnable est l'envoi de courrier et dans ce cas pourquoi ne pas simplement utiliser l'un des programmes de spamming d'email qui sont là dans la nature ?

2. L'envoi de signaux présente trop de problèmes (c'est mon avis, certains des problèmes liés à l'envoi sont pratiquement insolubles). Alors pourquoi ne pas inverser la logique : au lieu d'envoyer des signaux, créez un code qui sera lu (avec le nom d'utilisateur, le mot de passe, etc...) à partir d'un endroit donné et de cette façon, vous aurez résolu presque tous les problèmes que l'envoi ne peut pas résoudre (y compris la prévention de l'utilisation de plusieurs IP en même temps).

Donc, juste quelques réflexions ...
 

Mastercash

Essayez de googler "envoi d'emails en masse" et je pense que vous trouverez une réponse à cette question.

Pour ce qui est de la "collecte d'alertes" : vous devez avoir quelque chose qui les"exporte" vers un format lisible qui sera ensuite reconnu par un logiciel de votre choix qui distribuera des signaux ou permettra l'accès à ce signal.

PS : les services de signalisation sont beaucoup plus complexes qu'il n'y paraît au premier coup d'oeil et, si vous envisagez d'en créer un, vous pouvez compter sur des coûts substantiels pour qu'il fonctionne comme il le devrait.

Mastercash:
je pense que j'ai besoin de plus d'explications à ce sujet, pouvez-vous juste me donner un indice sur la façon d'écrire et de configurer un code qui m'aidera à envoyer l'alerte à tous mes clients en même temps.est-ce en stockant leur adresse e-mail dans la base de données..... mais comment le langage du serveur, par exemple, script php, recueillir les alertes de la plate-forme mt4 automatiquement ? ...... Je pense que c'est le problème, s'il peut y avoir un moyen, il peut être envoyé à plusieurs téléphones mobiles ou adresse e-mail.votre conseil, s'il vous plaît ?
Raison: