[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

 

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

 
drknn:

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.
Merci, mais qu'en est-il ? Ou dites-moi, peut-être que dans les paramètres du terminal, il y a une possibilité d'afficher plus clairement les marques d'heure sur toute la longueur de l'échelle de temps ?
 

Les amis, à l'aide ! Je n'arrive pas à calculer le volume maximal d'une transaction à ouvrir.

// Расчет максимального объема
   for (double m = 0.1; AccountFreeMarginCheck(Symbol(),OP_SELL,m)>30; m = m + 0.1)
      {
       Max_lots   = m;
       double Ost = AccountFreeMarginCheck(Symbol(),OP_SELL,m);
      }

Max_lots est toujours égal à zéro !


Et la deuxième question, comment le NIVEAU est-il calculé ?


 
root:
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 ?
Je comprends, l'absence de cet indicateur est la dernière chose qui vous empêche de gagner de l'argent sur le marché des changes. Certainement pas, mais Urain en a un similaire pour 8 lignes. Si vous ne pouvez pas, demandez à l'auteur, il est sur le forum.
Dossiers :
time_line.mq4  2 kb
 

En termes simples, le volume peut être calculé comme suit

/* вычитаем средства обозначенные на стопаут c учетом процента риска */
   curBalance = AccountFreeMargin() * (1 - AccountStopoutLevel() / 100.) * percent; // percent - от 0 до 100
/* множитель (1 или 10) зависит от четырех-пятизначности  */
   koeff = iif(DIGITS == 3 || DIGITS == 5, 10, 1);
/* расчет рабочего лота, нормализация */
   lot = NL(curBalance / (koeff * lossPoint * TICKVALUE + MARGINREQUIRED)); //lossPoint - количество пунктов потерь
   if (lot < MINLOT)    lot = 0;
   if (lot > MAXLOT)    lot = MAXLOT;

/* DIGITS,MINLOT,MAXLOT,TICKVALUE,MARGINREQUIRED получаем из Marketinfo() */


et niveau = AccountEquity() / AccountFreeMargin() * 100 ;

 
keekkenen:



et niveau = AccountEquity() / AccountFreeMargin() * 100 ;

n'est PAS correct. Cette formule ne fonctionne pas Niveau
 
Noterday:
PAS correct. Cette formule ne permet pas de calculer le niveau

Oui, faux, niveau = AccountEquity() / AccountMargin() * 100 ;

 
keekkenen:

Oui, faux, niveau = AccountEquity() / AccountMargin() * 100 ;

Merci :)
 
Bonjour. Les gars, s'il vous plaît, aidez-moi pour une chose. Je n'en ai même pas entendu parler - mais si quelqu'un l'avait ? L'idée est de transférer tous les objets sélectionnés d'un graphique à un autre. Supposons que j'aie besoin de transférer dans une fenêtre le marquage des ondes de tous les temps d'un symbole. Il est difficile de répéter la majoration en changeant d'horizon temporel, en raison de la lourdeur du calcul (le calcul de 30 à 50 tendances sur M1 fait ressortir le terminal - et il ne s'agit que de 16 à 24 heures d'un graphique). Peut-être existe-t-il un script qui copie les objets sur le graphique (dans ce cas - les lignes de tendance) avec le transfert ultérieur de l'ensemble des lignes de tendance dans une autre fenêtre ? Ou peut-être existe-t-il une possibilité de combiner plusieurs modèles dans une seule fenêtre ?
 

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.