Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 113

 
hoz:


En fait, oui. C'est peut-être trop tard, mais je ne comprends pas. C'est essentiellement le bénéfice en pps. C'est la distance entre l'ouverture et la fermeture. Pourquoi alors l'expression est-elle fausse ?

Parce que nous devons diviser par point le résultat de cette expression
 

Je me prends un peu la tête... :) Le problème :

1. Il y a un poste ouvert de 0.1 lot

2. Sa valeur TakeProfit est de 50 pips.

3. Je calcule son profit potentiel selon la formule PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE) ;

4. D'après le calcul, j'obtiens un bénéfice potentiel de 5,00 $ (0,1*50*1,0).

La position passe dans le rouge et à un moment donné, une autre moyenne d'achat s'ouvre, mais avec 0,2 lot.

1. Je calcule le Breakeven pour ces deux positions. La fonction a été utilisée pendant une longue période, comme prévu, et je n'ai pas eu à me plaindre jusqu'à présent :

//+----------------------------------------------------------------------------+
/*
Расчёт уровня БУ для множества по одному инструменту:
сумма лотов = суммарная позиция (СП)
стоимость тика СП = СТ
профит СП = ПСП
Формула расчёта довольно проста:
КП = ПСП / (СТ * СП)
В которой узнаём количество пипс (КП) до уровня БУ относительно текущей цены (ТЦ) символа.
И подставив КП в формулу БУ = ТЦ - КП * Point получаем уровень цены БУ.
В зависимости от направления СП выбирается прибавлять либо отнимать от ТЦ.
*/
double PriceWL(int op, int m1, int m2, double &ll) {
   double Res, pp, pt, tic, NumPP, Prof=0, SumLot=0.00000001;
   int i;
   
   pt =MarketInfo(sy,MODE_POINT);
   tic=MarketInfo(sy,MODE_TICKVALUE);                          // Стоимость тика СТ
   for (i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()!=op)          continue;
         if (OrderMagicNumber()==m1 || OrderMagicNumber()==m2) {
            Prof+=(OrderProfit()+OrderSwap()+OrderCommission());  // Суммарный профит позиций ПСП
            SumLot+=OrderLots();                                  // Суммарный лот позиций    СП
            }
         }
      }
   SumLot=MathAbs(NormalizeLot(SumLot));
   NumPP=MathAbs(Prof/(tic*SumLot));                           // Количество пунктов до уровня бу КП
   if (op==0) Res=Ask+NumPP*pt;
   if (op==1) Res=Bid-NumPP*pt;
   ll=SumLot;
   return(Res);
}
//+----------------------------------------------------------------------------+

2. Parfait. Vous avez calculé le seuil de rentabilité, mais... si vous y mettez les jetons de ces deux positions, ils fermeront à zéro. Ok, je pense. Maintenant, je dois ajouter à ce niveau de l'UB autant de points qu'il me faut pour obtenir un bénéfice total, égal à celui calculé précédemment - 5 $.

3. Et c'est là que j'ai un blocage dans mon cerveau. Ce que je fais : je prends 5 $, je divise par le lot total de ces deux positions (0,1 + 0,2 = 0,3), je multiplie par TICK_VALUE.

J'ai 5/(0.3*1.0) = 16.6666 Je le multiplie ensuite par Point (0,00016) et je l'ajoute au prix de Breakeven.

4. Parfait. Les prises y sont transférées, mais il me semble que le profit total de deux Baisers fermant à ce niveau n'est pas égal à 5 $ - il me semble moins. C'est ce que l'on peut voir sur le tableau des tests. Il montre clairement que lorsqu'une position est fermée, l'augmentation du solde est beaucoup plus importante que lorsque plusieurs positions sont fermées au niveau de la prise totale calculée (vous pouvez voir ces endroits sur le graphique par l'apparition de la ligne d'équité sur eux). La carte :


Où ai-je tort ?

Je comprends que vous puissiez imprimer le bénéfice total, mais... Je veux comprendre où je pourrais me tromper dans mes calculs, pas la valeur des variables. Je les ai déjà imprimés.

 
semiromid:

J'ai un prix composé de 5 chiffres. Exemple : 1,3221.


Cela signifie 4 chiffres. Signifie 4 ou 5 après la virgule. De cinq chiffres, ce serait, par exemple, 132210.
 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Messieurs les programmeurs, comment combiner un EA avec un indicateur ?

Par exemple, j'ai pris un bot simple mo_bidir.mq4 qui effectue des transactions en utilisant son propre algorithme et je veux qu'il ouvre des transactions en utilisant son propre algorithme mais après 3 signaux MA.

Par exemple sur lesignal - Trois moyennes mobiles:

FastEMA>MediumEMA>SlowEMA (tendance up) - bot achète

FastEMA<MediumEMA<SlowEMA (tendance down) - bot vend

Inp_Signal_TroisEMA_FastPeriod = 8 ;

Inp_Signal_TroisEMA_MediumPeriod = 38 ;

Inp_Signal_TroisEMA_SlowPeriod= 48;

Je veux que mon conseiller expert négocie sur une échelle de temps de 5 minutes et que l'indicateur donne des signaux sur une échelle de temps quotidienne ou de 4 heures, et je veux pouvoir changer d'échelle de temps dans les paramètres du robot.

\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Je m'excuse pour la répétition, mais dites-moi au moins dans quel fil du forum je dois postuler, ou dois-je créer un nouveau fil ?

Je ne sais pas quoi faire.

 
C'est l'endroit idéal pour vous : Travail
 

Bonjour à tous. Pouvez-vous expliquer pourquoi OrderSend n'ouvre pas de position?

if (NormalizeDouble(Open[0],Norm)>ma && NormalizeDouble(Bid,Norm)<=ma)

      {

      if (CheckFiltr()>=Filtr) 

         {

         Print (CheckFiltr()+" Buy"); <= Это в журнале есть, значит должна открыться сделка.

         for (i=0;i>5;i++)

            {

            res=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-Sl*Point,0,"OpenBuy",Magik,0,Green);

            Print ("Проверка Бай "+i); <= Этого в журнале нет.

            if (res>0) break;

            Print (GetLastError()); <= Этого в журнале нет.

            Sleep (5000);

            }

         }

      }   
 
for (i=0;i<5;i++)
 
artmedia70:

Je me prends un peu la tête... :) Le problème :

1. Il y a un poste ouvert de 0.1 lot

2. Sa valeur TakeProfit est de 50 pips.

3. Je calcule son profit potentiel selon la formule PotentialProfit = Lots*TakeProfit*MarketInfo(Symbol(), MODE_TICKVALUE) ;

4. D'après le calcul, j'obtiens un bénéfice potentiel de 5,00 $ (0,1*50*1,0).

La position passe dans le rouge et à un moment donné, une autre moyenne d'achat s'ouvre, mais avec 0,2 lot.

1. Je calcule le Breakeven pour ces deux positions. La fonction a été utilisée selon les besoins pendant longtemps, et je n'ai pas eu à me plaindre jusqu'à présent :

2. Parfait. Vous avez calculé le seuil de rentabilité, mais... si vous y mettez les jetons de ces deux positions, ils fermeront à zéro. Ok, je pense. Maintenant, je dois ajouter à ce niveau de l'UB autant de points qu'il me faut pour obtenir un bénéfice total, égal à celui calculé précédemment - 5 $.

3. Et c'est là que j'ai un blocage dans mon cerveau. Ce que je fais : je prends 5 $, je divise par le lot total de ces deux positions (0,1 + 0,2 = 0,3), je multiplie par TICK_VALUE.

J'ai 5/(0.3*1.0) = 16.6666 Je le multiplie ensuite par Point (0,00016) et je l'ajoute au prix de Breakeven.

4. Parfait. Les prises y sont transférées, mais il me semble que le profit total de deux Baisers fermant à ce niveau n'est pas égal à 5 $ - il me semble moins. C'est ce que l'on peut voir sur le tableau des tests. Il montre clairement que lorsqu'une position est fermée, l'augmentation du solde est beaucoup plus importante que lorsque plusieurs positions sont fermées au niveau de la prise totale calculée (vous pouvez voir ces endroits sur le graphique par l'apparition de la ligne d'équité sur eux). La carte :


Où ai-je tort ?

Je comprends que vous puissiez imprimer le bénéfice total, mais... Je veux comprendre où je pourrais me tromper dans mes calculs, pas la valeur des variables. Je les ai déjà imprimés.

même si la position est vendue ?
Dossiers :
mr01.mq4  6 kb
 
FAQ:

for (i=0;i<5;i++)

Je vous demande pardon, expliquez-moi quelle est l'erreur ici. Je n'arrive pas à comprendre.

 
pako:
même si la position est vendue ?

Je parle des positions d'achat. Vous n'avez pas besoin d'être aussi méticuleux. Naturellement, pour les positions de Sell, j'enlève.