Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1331

 
Aleksei Stepanenko:
Désolé, j'ai été pris dans la conversation ici, je n'ai pas remarqué...

Un thème commun, et vos codes sont toujours intéressants...

j'en ai pris beaucoup pour moi)

 
Iurii Tokman:
MakarFX:

.

 
Iurii Tokman:

La tâche technique est mieux comprise en ukrainien

Je ne suis pas encore à ce niveau, ma langue maternelle est le russe :)

...mais je le comprends à un niveau occasionnel.
 
Aleksei Stepanenko:

Je n'ai pas encore ce niveau, ma première langue est le russe :)

Je suis de l'URSS... J'ai deux langues maternelles)
 
MakarFX:
Je suis de l'URSS... j'ai deux langues maternelles)
.
 
MakarFX:
Je suis de l'URSS... J'ai deux langues maternelles)

et nous en avons trois, toujours surzhik.

 
DanilaMactep:

Je ne suis pas très bon en maths - comment calculer la distance entre l'ouverture de l'ordre et le stop dans le code, afin de pouvoir remplacer sl par celui-ci ?

La valeur du lot a été normalisée comme suit :

Il reste donc à comprendre comment calculer la distance entre la position ouverte et le stop dans le code ?

La valeur absolue de la différence entre le cours d'ouverture et le cours stop doit être divisée par le pas de cotation.

  int sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;

Et cette valeur sl entre dans la formule.

En considérant que vous mettez un stop calculé par l'indicateur ATR, il suffit de

double lot =MathFloor((Free*MaxRisk/100)/(sl/_Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
Et ce sera déjà la taille normalisée du lot.
 
MakarFX:

prix d'ouverture de l 'achat

achat stop loss

spread

Maintenant je comprends, il me reste à comprendre, quelle valeur je dois attribuer aux prix d'achat et de vente.

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Ask+sl,Ask-tp ,"ДИВЕРГЕНЦИЯ НА СЕЛ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР

En d'autres termes, j'attribue Ask au prix d'ouverture à l'achat, f au prix d'ouverture à la vente j'attribue Bid ?

 
DanilaMactep:

Dans le code, j'ouvre un ordre de la manière suivante.

Vous voulez dire que j'assigne la variable Ask au prix d'achat ouvert et Bid au prix de vente ouvert ?

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

A en juger par cette fonction, vous connaissez déjà le stop loss... Je ne comprends pas quel est le problème...

 
Alexey Viktorov:

Divisez la valeur absolue de la différence entre le cours d'ouverture et le cours stop par le pas de cotation.

et cette valeur sl sera intégrée dans la formule.

En considérant que vous mettez un stop calculé par l'indicateur ATR, il suffit de

Et ce serait la taille normalisée du lot.

Je l'ai fait par code comme vous l'avez conseillé. Au début du code, j'ai la condition pour choisir le type d'arrêt - atp ou fixe.

if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     //Print("СТОП ПО АТР, ЕГО РАЗМЕР ");
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     Print("СТОП ЛОС ФИКСИРОВАННЫЙ В ПУНКТАХ");
     sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
     }

Puis j'ai commenté ma normalisation et l'ai assignée de cette façon

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ

Le calcul du profit est le suivant dans le code. Aucun problème ici et après avoir calculé le profit, j'ai ajouté la formule effrayante qu'on m'a conseillé d'utiliser.

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА КОТОРУЮ МНЕ СОВЕТОВАЛИ

Tout a été compilé sans erreur. Mais lorsque j'ai exécuté le test, l'erreur apparaît dans le journal, c'est une division par zéro d'après ce que je comprends et le test est arrêté. Qu'est-ce que j'ai raté ou qu'est-ce que je n'ai pas fait correctement ?

ERREUR AU DÉBUT DU TEST

Raison: