
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
Ok, donc si vous utilisez
double stop;
stop=stoploss*Point();
Print(DoubleToString(stoploss));
En utilisant la fonction Point(), vous devriez obtenir la valeur de votre stoploss et vous devrez ensuite l'ajouter ou la soustraire de l'offre et de la demande respectives pour obtenir le niveau de prix de votre stop.
Le même principe s'applique aux prises de bénéfices, mais bien sûr en sens inverse.
Vous pouvez vérifier certains des EA dans la base de code où il y a beaucoup d'exemples et de variations sur la façon dont les codeurs font ces choses dans leurs EA.
Par exemple, en voici un appelé Trailing Master https://www.mql5.com/en/code/16136
// 1. Main function
//-------------------------------------------------------------------------
void OnTick(void)
{
Comment("Copyright © 2016, Il Anokhin\n"+TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- 1.1. Define pip -----------------------------------------------------
if(Digits==4 || Digits<=2) pip=Point;
if(Digits==5 || Digits==3) pip=Point*10;
//--- 1.2. Trailing -------------------------------------------------------
for(i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==Symbol() && TS>0 && OrderProfit()>0)
{
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==true && OrderComment()==Comm && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_BUY && OrderOpenPrice()+TS*pip<=Bid && OrderStopLoss()<Bid-TS*pip) w=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TS*pip,OrderTakeProfit(),0);
if(UC==false && UM==false && OrderType()==OP_SELL && OrderOpenPrice()-TS*pip>=Ask && (OrderStopLoss()>Ask+TS*pip || OrderStopLoss()==0)) w=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TS*pip,OrderTakeProfit(),0);
}
}
}
//--- 1.3. End of main function -------------------------------------------
Où vous pouvez voir le codeur Il Anokhin fist définit pip.
Mais voici un autre exemple appelé E-smart trailing de Димаhttps://www.mql5.com/en/code/8674.
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int stoploss)
{
bool result;
double sl = 0;
double point = MarketInfo(OrderSymbol(),MODE_POINT);
if (OrderType() == OP_BUY) sl = OrderOpenPrice() + stoploss * point;
if (OrderType() == OP_SELL) sl = OrderOpenPrice() - stoploss * point;
result = OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,CLR_NONE);
if (result && UseSound) PlaySound(var_132);
}
//+------------------------------------------------------------------+
Remarquez les différences subtiles dans la façon de faire les choses.
J'essaie toujours plusieurs choses jusqu'à ce que je trouve ce qui fonctionne le mieux.
Ok, donc si vous utilisez...
Omg, juste un rapide check out étonnant merci pour tout avant que je commence à lire et à essayer quelque chose. Je vais essayer ça bientôt.
Encore une fois un grand merci @Marco vd Heijden
Les objets sont empilés les uns sur les autres, il est donc important de faire savoir à chartevent () quels clics sur quel bouton ou quels objets ont la plus haute priorité par rapport aux autres objets qui pourraient se chevaucher.
Un grand merci Man, j'ai aimé tes commentaires qui sont plus clairs et plus utiles.
Bonne chance à toi.
Ok, donc si vous utilisez
J'essaie toujours plusieurs choses jusqu'à ce que je trouve ce qui fonctionne le mieux.
J'essaie juste de comprendre votre bon commentaire et ensuite d'écrire de bons codes pour mes ordres, mes fonctions Stop Loss et Take Profit - merci pour cela.
Donc, j'ai déjà essayé quelque chose comme le code ci-dessous, et j'ai besoin d'être sûr que les deux valeurs de Stop Loss EURUSD et FB sont correctes, pour 10 pips ? ( si vous voulez savoir ce que je pense - juste je pense que oui ci-dessous les logs / résultats les deux sont la bonne valeur pour 10 pips. )
e.g : valeur stoploss = 10 ; Position - BUY
log : EURUSD | prix (ask) : 1.05633 / Stop Loss : 1.05533
log : FB | prix (ask) : 119.69/ Stop Loss : 119.59
( J'appelle la fonction ci-dessous par void OnChartevent() )
//---
if ( sparam == _buy_name_btn )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
_Buy_calc_SL_TP();
Print( " | Click Verify / ");
}
//---
return;
{
//---
if ( _StopLoss_ON == true )
{
//_Sl = OrderOpenPrice() - _StopLoss * _Pip;
_Sl = Ask - _StopLoss * _Pip;
Print( " | Buy Calc SL TP Function / StopLoss: ", _Sl );
}
//---
return;
}
Ça a l'air de fonctionner.
J'essaierai d'inclure le commentaire de M. William en tête du code de l'EA - merci encore William.Grand calcul de Pip's MQL4
( s'il vous plaît ne me blâmez pas parce que cette industrie de code semble très large pour moi, et parfois je perds mon esprit - de toute façon j'espère que je vais terminer les codes de mon EA Trade Panel bientôt )
Et je partagerai le code de mon EA de test après l'avoir terminé pour savoir si ce code est bon / correct ou quoi (car je ne suis pas un codeur / programmeur professionnel - je travaille dessus).
Keith Watford:
Ok, d'accord. Je ne peux pas prendre la peine de lire certains de tes messages parce que ça me fait mal aux yeux.
Si d'autres ressentent la même chose, c'est vous qui manquez, pas moi.
Le marché est fermé, et je ne suis pas sûr de rien d'autre. Mais j'ai essayé quelque chose comme le code ci-dessous, j'ai l'impression d'avoir manqué quelque chose mais je ne le trouve pas.
(Je voudrais mentionner que les EA de mon Trade Panel ont des codes pour les positions ouvertes d'achat et de vente, mais j'essaie de l'écrire avec ma main, pour être sûr du fonctionnement de cet EA).
Merci d'avance pour votre aide et vos conseils.
#define POINT int ///< `CHANGE / _Point`.
#define PIP double ///< `POINT / PipsPerPOINT`.
CHANGE points_to_change(POINT n){ return n * _Point ;}
POINT change_to_points(CHANGE c){ return POINT(c / _Point + 0.5) ;}
CHANGE pips_to_change (PIP n){ return points_to_change(pips_to_points(n));}
PIP change_to_pips (CHANGE c){ return points_to_pips(change_to_points(c));}
POINT pips_to_points (PIP n){ if( (_Digits&1) == 1) n *= 10.0; return POINT(n);}
PIP points_to_pips (POINT n){ PIP p = n; if( (_Digits&1) == 1) p /= 10.0; return p;}
string prfx = "test" ;
string sellbutton = prfx + "sell" ;
string sounduse = "tick.wav" ;
int stoploss = 10 ;
int takeprofit = 10 ;
int magic = 12345 ;
int ticket = 0 ;
int slippage = 3 ;
double lot = 0.01 ;
double sl ;
bool stoploss_on = true ;
bool result ;
bool sound_use = true ;
//---
//---
int OnInit()
{
ObjectCreate ( 0, sellbutton, OBJ_BUTTON , 0, 0, 0 );
ObjectSetString ( 0, sellbutton, OBJPROP_TEXT , "Sell" );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YDISTANCE , 20 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_XSIZE , 80 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_YSIZE , 40 );
ObjectSetInteger ( 0, sellbutton, OBJPROP_CORNER , CORNER_LEFT_UPPER );
ObjectSetInteger ( 0, sellbutton, OBJPROP_COLOR , clrWhite );
ObjectSetInteger ( 0, sellbutton, OBJPROP_BGCOLOR , clrMaroon );
ObjectSetInteger ( 0, sellbutton, OBJPROP_STATE , false );
ObjectSetInteger ( 0, sellbutton, OBJPROP_ZORDER , 1 );
Print( "ObjectsTotal: ", ObjectsTotal() );
return(0);
}
//---
//---
void OnTick()
{
//---
//---
return;
}
//---
//---
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll( 0, prfx );
//---
return;
}
//---
//---
void OnChartEvent(const int id ,
const long& lparam ,
const double& dparam ,
const string& sparam
)
{
// Sell
if ( sparam == sellbutton )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
ticket = Orderfuntions( sellbutton );
}
return;
}
//---
//---
void SellCalcSLTP()
{
//---
if ( stoploss_on == true )
{
if ( OrderType() == OP_SELL ) sl = OrderOpenPrice() - pips_to_change( stoploss );
if ( OrderType() == OP_BUY ) sl = OrderOpenPrice() + pips_to_change( stoploss );
result = OrderModify( OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, CLR_NONE );
if ( result && sound_use ) PlaySound( sounduse );
}
//---
return;
}
//---
//---
int Orderfuntions( string _Order_selector )
{
// Sell Order
SellCalcSLTP();
if ( _Order_selector == sellbutton )
{
ticket = OrderSend( _Symbol, OP_SELL, lot, Bid, slippage, sl, takeprofit, "comment", magic, 0, clrMaroon );
}
return(ticket);
}
Cela semble correct, mais vous ne pouvez pas utiliser ordermodify comme ça, vous devez d'abord sélectionner une commande avec la fonction OrderSelect().