[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 594
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
J'ai pris la théorie des probabilités et statistiquement si l'ouverture de l'ordre sera dans les 50 pips du prix, alors à l'ouverture de l'ordre avec 10 pips de profit est plus facile à atteindre - s'il y aura aussi 10 pips de stop loss (même le spread n'est pas un problème) le mouvement de la tendance est une grande chose ....
Ajouter un stop loss, indépendamment du StepStop
//+------------------------------------------------------------------+
//| Volfram.mq4 |
//| Vova-x@list.ru |
//| |
//+------------------------------------------------------------------+
#property copyright "Vova-x@list.ru"
#propriété lien ""
//-----------------------------------------
extern TakeProfit=10 ;
extern int StepStop=45 ;
extern double Lots=0.01 ;
extern bool MoneyManagement=true ;
extern inttern MarginPercent=10 ;
//-------------------------------------------
int level_sell_stop ;
int level_buy_stop ;
//----------------------------------------------------------
void init()
{
// int minstop=MarketInfo(Symbol(),MODE_STOPLEVEL) ;
//Print("levelbuy_stop : "+minstop ;)
}
//-----------------------------------------------------------
void start()
{
if (!IsTradeAllowed()) return ;
level_buy_stop=0 ;
level_sell_stop=0 ;
StepingStop() ;
StepingPendings() ;
si (TotalBuy ()==0 && TotalBuyStop ()==0) SetBuyStop () ;
si (TotalSell()==0 && TotalSellStop()==0) SetSellStop() ;
Comment("Level Buy Stop=",level_buy_stop*Point,
"\n", "Level Sell Stop=",level_sell_stop*Point) ;
}
//---------------------------------------------------------------------------------------------
void StepingStop()
{
si (StepStop<1) retour ;
int ask, bid, open, stop, x ;
double perte ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol())
si (OrderType()==OP_BUY)
{
bid=MathRound(Bid/Point) ;
open=MathRound(OrderOpenPrice()/Point) ;
stop=MathRound(OrderStopLoss()/Point) ;
x=(bid-open)/StepStop ; x-- ; x*=StepStop ;
level_sell_stop=open+x ;
si (stop>=open+x)
perte=(open+x)*Point ;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE) ;
}
si (OrderType()==OP_SELL)
{
ask=MathRound(Ask/Point) ;
open=MathRound(OrderOpenPrice()/Point) ;
stop=MathRound(OrderStopLoss()/Point) ;
x=(open-ask)/StepStop ; x-- ; x*=StepStop ;
level_buy_stop=open-x ;
si (stop>0 && stop<=open-x)
perte=(open-x)*Point ;
OrderModify(OrderTicket(),OrderOpenPrice(),loss,OrderTakeProfit(),0,CLR_NONE) ;
}
}
}
//----------------------------------------------------------------------------
void StepingPendings()
{
int ask, bid, open ;
double prix, perte, profit ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol())
si (OrderType()==OP_BUYSTOP)
{
si (level_buy_stop==0)
open=MathRound(OrderOpenPrice()/Point) ;
si (open<=level_buy_stop)
price=level_buy_stop*Point ;
perte=prix-étape-arrêt*point ;
profit=0 ; si (TakeProfit>0) profit=prix+TakeProfit*Point ;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE) ;
}
si (OrderType()==OP_SELLSTOP)
{
si (level_sell_stop==0)
open=MathRound(OrderOpenPrice()/Point) ;
si (open>=level_sell_stop)
price=level_sell_stop*Point ;
perte=prix+StepStop*Point ;
profit=0 ; si (TakeProfit>0) profit=prix-TakeProfit*Point ;
OrderModify(OrderTicket(),price,loss,profit,0,CLR_NONE) ;
}
}
}
//-------------------------------------------------------------------
void SetBuyStop()
{
double lots=LotsCounting() ;
double price=Bid+StepStop*Point ;
double perte=prix-StepStop*Point ;
double profit=0 ; if (TakeProfit>0) profit=prix+TakeProfit*Point ;
int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,prix,0,perte,profit,"",0,0,CLR_NONE) ;
if (ticket<1) Print("La définition d'un ordre en attente a échoué avec l'erreur #",GetLastError()," ",(GetLastError()) ;
}
void SetSellStop()
{
double lots=LotsCounting() ;
double price=Ask-StepStop*Point ;
double perte=prix+StepStop*Point ;
double profit=0 ; if (TakeProfit>0) profit=prix-TakeProfit*Point ;
int ticket=OrderSend(Symbol(),OP_SELLSTOP,lots,prix,0,perte,profit,"",0,0,CLR_NONE) ;
if (ticket<1) Print("La définition d'un ordre en attente a échoué avec l'erreur #",GetLastError()," ",(GetLastError()) ;
}
int TotalBuy()
{
int count=0 ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol()) continuer ;
si (OrderType()==OP_BUY) count++ ;
}
retour (count) ;
}
int TotalBuyStop()
{
int count=0 ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol()) continuer ;
si (OrderType()==OP_BUYSTOP) count++ ;
}
retour (count) ;
}
int TotalSell()
{
int count=0 ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol()) continuer ;
si (OrderType()==OP_SELL) count++ ;
}
retour (count) ;
}
int TotalSellStop()
{
int count=0 ;
for (int i=0 ; i<OrdersTotal() ; i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break ;
si (OrderSymbol()!=Symbol()) continuer ;
si (OrderType()==OP_SELLSTOP) count++ ;
}
retour (count) ;
}
double LotsCounting()
{
lots doubles=Lots ;
if (Gestion de l'argent)
{
double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE) ;
double freemargin=AccountFreeMargin() ;
lots=0 ; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),1) ;
}
si (lots>10) lots=NormalizeDouble(lots,0) ;
si (lots<0.01) lots=0.01 ;
retour (lots) ;
}
// Fin
La raison pour laquelle ils n'ont pas répondu est probablement que la rédaction d'un tel indicateur est simple et très probablement inutile.
Les amis, à l'aide ! Je n'arrive pas à calculer le volume maximal d'une transaction à ouvrir.
Max_lots est toujours égal à zéro !
Et la deuxième question, comment le NIVEAU est-il calculé ?
Merci, mais quand même ? Ou dites-moi, peut-être que dans les paramètres du terminal, il y a une option pour afficher les marqueurs d'heure plus clairement sur toute la longueur de l'échelle de temps ?
En termes simples, le volume peut être calculé comme suit
et niveau = AccountEquity() / AccountFreeMargin() * 100 ;
et niveau = AccountEquity() / AccountFreeMargin() * 100 ;
PAS correct. Cette formule ne permet pas de calculer le niveau
Oui, faux, niveau = AccountEquity() / AccountMargin() * 100 ;
Oui, faux, niveau = AccountEquity() / AccountMargin() * 100 ;
Désolé pour la gaffe, mais c'est le grand jour.
=====
Et se balancer à une hauteur insignifiante...
Quelques phrases qui sont arrivées d'ici...
===========
Andrei Voznesensky.