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

 
Tanita Gajduchok:
Bonjour. Comment faire un classement ici ?

haut ?

 
Salutations !

Comment écrire une fonction comme celle-ci :

La somme du volume des chandeliers ascendants doit être égale à 2 fois la somme du volume des chandeliers descendants, par exemple pour les 10 dernières mesures.

Comme celle de la capture d'écran.


Dossiers :
IMG_9206.PNG  87 kb
 

Bon après-midi à tous. J'essaie d'associer un calcul de la taille du lot à la machine Grail, afin que le lot soit fixé en pourcentage du dépôt en cas de perte. En d'autres termes, si un stop loss se déclenche, le pourcentage spécifié du dépôt est perdu, ou si le dépôt est petit pour ce pourcentage, alors le lot est fixé au minimum possible pour le courtier... J'ai trouvé un script sur un certain site web qui fait de telles choses et j'ai transféré le code du script à moi-même, mais le lot n'est pas considéré correctement... Je l'ai fait. Dans les variables d'entrée, j'ai déclaré une variable responsable du risque maximum.

extern int MaxRisk=1;// МАКСИМАЛЬНЫЙ % УБЫТКА ПРИ СТОП ЛОССЕ?

Puis je déclare des variables dans le tick on. Une variable qui stocke le montant des fonds libres dans le compte. Une variable de la valeur ponctuelle d'un symbole. Une variable du lot minimum d'un courtier. Une variable qui stocke la valeur du lot maximum chez le courtier. Et la variable qui stocke le pas de la taille du lot.

  double Free =AccountFreeMargin();// ПОЛУЧАЕМ СВОБОДНЫЕ СРЕДССТВА ДЛЯ РАСЧЁТА ОБЪЁМА ЛОТА
  double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); //СТОИМОСТЬ 1 ПУНКТА
  double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);   // МИНИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);     // МАКСИМАЛЬНЫЙ ЛОТ РАЗРЕШЁННЫЙ БРОКЕРОМ
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);    // ШАГ ИЗМЕНЕНИЯ РАЗМЕРА ЛОТА

Puis on calcule le volume du lot avec un risque donné à un certain stop loss. Le Stop Loss est calculé par atp ou fixé en pips - ce calcul fonctionne correctement car si je mets un lot fixe alors tout est bien ouvert et fonctionne. La formule pour calculer le volume du lot est la suivante.

double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА, КОТОРУЮ Я СОВСЕМ НЕ ПОНИМАЮ((((
  if(lot<Min_Lot) lot=Min_Lot; //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ МЕНЬШЕ ЧЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ЛОТ ПРИСВАЕМАЕМ МИНИМАЛЬНЫЙ ЛОТ У БРОКЕРА
if(lot>Max_Lot) lot=Max_Lot;  //ЕСЛИ ЛОТ ПОЛУЧИЛСЯ БОЛЬШЕ ЧЕМ МАКСИМАЛЬНЫЙ ЛОТ У БРОКЕРА ТО ОЛТ ПРИСВАЕВАЕМ МАКС ЛОТ У БРОКЕРА

 


Après tous les calculs à travers la valeur du lot d'impression pour le visualiser.

Print("ЛОТ ДО НОРМАЛИЗАЦИИ= "+lot);
 lot=NormalizeDouble(lot,Digits());
Print("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);

Ce qui est affiché dans le journal de bord ce qui est enregistré pour le lot et l'arrêt - les valeurs d'arrêt sont correctes mais le lot ne l'est pas((((

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
DanilaMactep:

Bon après-midi à tous. J'essaie d'associer un calcul de la taille du lot à la machine Grail, afin que le lot soit fixé en pourcentage du dépôt en cas de perte. En d'autres termes, si un stop loss se déclenche, le pourcentage spécifié du dépôt est perdu, ou si le dépôt est petit pour ce pourcentage, alors le lot est fixé au minimum possible pour le courtier... J'ai trouvé un script sur un certain site web qui fait de telles choses et j'ai transféré le code du script à moi-même, mais le lot n'est pas considéré correctement... Je l'ai fait. Dans les variables d'entrée, j'ai déclaré une variable responsable du risque maximum.

Puis je déclare des variables dans le tick on. Une variable qui stocke le montant des fonds libres dans le compte. Une variable de la valeur ponctuelle d'un symbole. Une variable du lot minimum d'un courtier. Une variable qui stocke la valeur du lot maximum chez le courtier. Et la variable qui stocke le pas de la taille du lot.

Puis on calcule le volume du lot avec un risque donné à un certain stop loss. Le Stop Loss est calculé par atp ou fixé en pips - ce calcul fonctionne correctement car si je mets un lot fixe alors tout est bien ouvert et fonctionne. La formule pour calculer le volume du lot est la suivante.


Après tous ces calculs, j'imprime la valeur du lot pour la vérifier.

Ce qui est imprimé dans le journal de bord peut être vu à ***

À première vue, la fonction semble correcte. La seule chose que vous devez mettre dans la formule n'est pas le prix de l'ordre stoploss mais la distance entre l'ouverture de l'ordre et le stop en points.

Ensuite, nous devons normaliser le lot en fonction de la précision, non pas en _Digits mais en Step - (pas incrémental de la taille du lot). L'impression doit être sortie par DoubleToString() avec la même précision, puis vous verrez ce que vous voulez voir.

 
DanilaMactep:

Bonjour à tous. J'essaie de faire entrer un calcul de taille de lot dans la machine Grail,

Je l'ai fait.

Order_Lots = NormalizeDouble((AccountBalance()/100*Percen)/(MarketInfo(Symbol(),MODE_TICKVALUE)*Stop_Point)-0.005,2);
 
Alexey Viktorov:

À première vue, la fonction semble bien fonctionner. La seule chose que nous devrions ajouter à la formule est la distance en points entre l'ouverture de l'ordre et le stop, plutôt que le prix stoploss de l'ordre.

En outre, nous devrions normaliser le lot à la précision, non pas à _Digits mais à Step - (étape incrémentielle de la taille du lot) et vous devriez le sortir à Print en utilisant DoubleToString() avec la même précision.

Mes mathématiques ne sont pas très bonnes - comment calculer la distance entre l'ouverture de l'ordre et le stop et remplacer le sl par celui-ci ?

DoubleToString("ЛОТ ПОСЛЕ НОРМАЛИЗАЦИИ= "+lot);// ВЫВОД ЗНАЧЕНИЯ ЛОТА
La valeur du lot a été normalisée comme suit
lot=NormalizeDouble(lot,Step);// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ ЛОТА 

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

 
DanilaMactep:

Reste donc à savoir comment calculer la distance entre l'ouverture et le stop dans le code ?

if(buy)
Stop_Point= (Pric_UP-Loss_UP)/Point+Spread; 
else
Stop_Point= (Loss_DN-Pric_DN)/Point+Spread; 
 
MakarFX:

Merci beaucoup pour ce morceau de code, mais la question qui se pose maintenant est de savoir quel type de variable déclarer dans ce morceau de code et quelles valeurs leur attribuer ? Je ne suis pas un magicien, j'apprends juste.

 
DanilaMactep:

Merci beaucoup pour ce morceau de code, mais la question qui se pose maintenant est de savoir quels types de variables déclarer dans ce morceau de code et quelles valeurs leur attribuer ? Je ne suis pas un magicien, je ne fais qu'apprendre.

Pric_UP

prix ouvert à l' achat

Loss_UP

achat stop perte prix

   Spread = StrToInteger(DoubleToString(MarketInfo(Symbol(),MODE_SPREAD),0));
spread
 
Порт-моне тв:
Salutations !

Comment écrire une fonction comme celle-ci :

La somme du volume des chandeliers ascendants doit être égale à 2 fois la somme du volume descendant, par exemple pour les 10 dernières mesures.

Comme celle de la capture d'écran.


Quelqu'un peut-il m'aider ?

Raison: