Bonsoir,
Je viens de terminer le codage de ma fonction "Trailingstop hidden", apparemment, les essais sont concluants, et comme ils s'effectuent sur l'EA, aucun problème de message surcharge coté serveur.
Les variables globales du langage MQL4, sont utilisées pour mémoriser chaque valeur trailing stop,et permettent de par leur nom de differentier les stops sur plusieurs trades simultanés, elles sont ensuite effacées si la position est cloturée par la fonction.
il convient donc de rajouter dans l'EA la ligne :
if(OrdersTotal()==0)GlobalVariablesDeleteAll();
lors de périodes sans trade, pour effacer les variables globales abandonnées par les autres clotures
Attention GlobalVariablesDeleteAll() efface TOUTES les variables globales
Le code est certainement à améliorer ...cependant, il fonctionne...
Ce type de stop suiveur doit etre utilisé sur un serveur VPS, vu qu'il est généré et modifié par l'EA
Code
int TS; //Valeur Trailing stop
int TS_Start; //Valeur seuil de départ
void apply_hidden_trailingstop()
{
string nom_var_B, nom_var_S;
for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--)
{
OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
nom_var_B = StringConcatenate(DoubleToStr(OrderTicket(), 0), Symbol(), Period(), "B");
if (!GlobalVariableCheck(nom_var_B))
GlobalVariableSet(nom_var_B, 0);
if (OrderStopLoss() < Bid - TS * pt && Bid > (OrderOpenPrice() + (TS + TS_Start) * pt) && GlobalVariableGet(nom_var_B) == 0)
{
GlobalVariableSet(nom_var_B, Bid - TS * pt);
}
if ((Bid - TS * pt) > GlobalVariableGet(nom_var_B) && GlobalVariableGet(nom_var_B) != 0)
GlobalVariableSet(nom_var_B, Bid - TS * pt);
if (GlobalVariableGet(nom_var_B) != 0 && Bid < GlobalVariableGet(nom_var_B) && (Bid - TS * pt) > OrderOpenPrice())
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, Green);
GlobalVariableDel(nom_var_B);
}
}
if (OrderType() == OP_SELL)
{
nom_var_S = StringConcatenate(DoubleToStr(OrderTicket(), 0), Symbol(), Period(), "S");
if (!GlobalVariableCheck(nom_var_S))
GlobalVariableSet(nom_var_S, 0);
if (OrderStopLoss() > Ask + TS * pt && Ask < (OrderOpenPrice() - (TS + TS_Start) * pt) && GlobalVariableGet(nom_var_S) == 0)
{
GlobalVariableSet(nom_var_S, Ask + TS * pt);
}
if ((Ask + TS * pt) < GlobalVariableGet(nom_var_S) && GlobalVariableGet(nom_var_S) != 0)
GlobalVariableSet(nom_var_S, Ask + TS * pt);
if (GlobalVariableGet(nom_var_S) != 0 && Ask > GlobalVariableGet(nom_var_S) && (Ask + TS * pt) < OrderOpenPrice())
{
OrderClose(OrderTicket(), OrderLots(), Ask, 3, Green);
GlobalVariableDel(nom_var_S);
}
}
}
}
}
//---------------------------------------------------------------------------------------------------------------------------------------
Bon codage
Modifié le 2014-01-20 23:01:03 par
AliX