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

 
DanilaMactep:

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

Ensuite, j'ai commenté ma normalisation et l'ai définie de cette façon

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.

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é. Où je me suis trompé ou ce que j'ai fait de mal ?


Il suffit de le supprimer.

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

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

Ensuite, j'ai commenté ma normalisation et l'ai définie de cette façon

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.

Tout a été compilé sans erreur. Mais quand j'exécute le test, le journal montre une erreur, que j'obtiens une division par zéro et le test est arrêté. Où est-ce que j'ai foiré ici ou qu'est-ce que je n'ai pas fait correctement ?


Lorsqu'on vous propose deux options différentes, vous ne devez pas appliquer les deux en même temps.

Vous comptez les sl comme deux choix différents

sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

ou

sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ

vous obtenez la valeur des prix. Et la formule doit contenir des points allant de ... à .....

Ainsi, le stop à une distance du prix est soit iATR(.........)/_Point soit razmer_fikc_sl mais utiliser deux valeurs différentes dans la fonction n'est pas très pratique, il est donc préférable de ne laisser qu'une seule variante

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

Et n'oubliez pas que l'esclave doit être calculé AVANT d'essayer de calculer la taille du lot.

 
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
Veillez à
 

Faites en sorte...

void OnTick()
  {
//---
if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
 
MakarFX:

Il suffit de le supprimer.

J'ai corrigé la ligne et le test a commencé - MERCI beaucoup ! Je n'ai pas compris pourquoi, lorsque l'on met le stoploss de l'iATR dans une variable, il faut le diviser par le point final. P/S J'ai du mal avec les maths, je ne déconne pas :-( Mais je suppose que le test s'est bien passé et avec un lot de 100 mettre le minimum, et avec un lot de 10000 différent tout le temps, donc ça marche bien... Merci encore pour l'aide....

 
DanilaMactep:

J'ai corrigé la chaîne et le test a commencé - MERCI beaucoup ! Je n'ai pas compris pourquoi, lorsque l'on met le stoploss de l'iATR dans une variable, il faut le diviser par le point final. P/S J'ai du mal avec les maths, je ne déconne pas :-( Mais je suppose que le test s'est bien passé et qu'à 100 de dépôt le lot est minime, et qu'à 10000 depo c'est différent tout le temps, donc ça marche ok... Merci encore pour l'aide....

ATR donne un nombre décimal, comme 0,00120.

razmer_fikc_sl est un nombre entier.

pour calculer le lot, il faut des points, c'est-à-dire des entiers

ATR/Point donne un nombre entier

 
C'est un vieux sujet, mais je ne trouve pas de solution. Comment spécifier l'intervalle de temps (par exemple de 12:00 à 14:00) et ouvrir un ordre seulement une fois dans cet intervalle et qui remplit certaines conditions (RSI<30 par exemple).

Ou

Quelque chose d'analogue au sommeil : ouvrir un ordre sur une condition donnée et ne rien faire pendant 2 heures. Mais le sommeil ne fonctionne pas dans le testeur.
 
Порт-моне тв:
C'est un vieux sujet, mais je ne trouve pas de solution. Comment spécifier le créneau horaire (par exemple, de 12:00 à 14:00) et n'ouvrir qu'une seule fois dans ce créneau un ordre satisfaisant une certaine condition (RSI<30 par exemple).

Ou

Quelque chose d'analogue au sommeil : ouvrir un ordre sur une condition donnée et ne rien faire pendant 2 heures. Mais le sommeil ne fonctionne pas dans le testeur.

première condition - le moment est venu
deuxième condition - rsi
troisième condition - il n'y a pas de tel ordre dans l'historique au prix d'ouverture en intervalles

 

Bon après-midi.

Il existe un indicateur Elliott Wave Oscillator, qui donne les valeurs numériques de la variable EWO. Il existe des OT positifs qui sont supérieurs à zéro et des OT négatifs qui sont inférieurs à zéro.

A partir des 100 dernières lectures de l'EWO, il est nécessaire de calculer la valeur moyenne de l'EWO positif et séparément la valeur moyenne de l'EWO négatif.

Je récupère les valeurs de l'indicateur double EWO=iCustom(Symbol(),0, "Elliott Wave Oscillator",0,0) ;

Veuillez nous indiquer quel code mql4 peut mettre en œuvre ceci dans un EA ?


J'ai réussi à trouver la moyenne modulo.

double avarage_EWO = 0 ;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO + MathAbs( iCustom(Symbol(),0, "Elliott Wave Oscillator",0,g) ) ; // modulo moyenne
avarage_EWO = avarage_EWO/100 ;


Mais comment calculer séparément l'EWO moyen positif et l'EWO moyen négatif ?

Merci !



 

Take Profit.

Je n'arrive pas à comprendre comment et à quoi sert ORDER_REASON_TP,

Je sais comment fonctionneDEAL_REASON_TP, mais je ne sais pas ce qui se passe avec les commandes ici.

Raison: