[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 888

 
Multy:

Je vois.

Au fait, existe-t-il un minuteur dans MQL4 ou seulement dans MQL5 ?

Probablement juste ces fonctions :

https://www.mql5.com/ru/search?utm_campaign=MQL4.community

https://www.mql5.com/ru/search?utm_campaign=MQL4.community
 
kwadrad:

Question pour les aksakals

Le testeur a soudainement cessé de fonctionner, ne produisant aucune donnée historique.

Que dois-je en faire ?

pour votre information : l'archive des citations a été téléchargée


Cela m'a aidé de redémarrer le terminal et de supprimer au préalable les citations téléchargées dans le dossier : C:\Program Files\MetaTrader - Alpari\history\Alpari-Micro2

puis retélécharger l'archive des citations

 
Noterday:
Pouvez-vous m'indiquer la fonction qui calcule le volume maximal possible d'ouverture des ordres ?
Laissez-moi vous donner une tige... :)
La fonction ci-dessous contient toutes les données nécessaires pour calculer les paramètres dont vous avez besoin. Je suis tellement paresseux que je ne peux même pas taper sur les touches...

Vous pouvez trouver ce dont vous avez besoin et le modifier vous-même... Le code lui-même est si simple et accessible que personne n'aura de mal à le refaire...

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt, double divider=4.0)        // lt = проверяемый лот, divider = на сколько разделить
{                                                        //                                 свободные средства
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/divider,dig);  // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);                                                         // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                         // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Une question...

Pourquoi avez-vous besoin d'un commerce comme celui d'Hitler à la fin de la guerre... Il recrutait des enfants dans les Jeunesses hitlériennes, pour ainsi dire, de la viande pour un tir de cartouche Faust...

Cela ne sonne pas comme une cloche ?????

IMHO, bien sûr...

 
artmedia70:
Laissez-moi vous donner une tige... :)
La fonction ci-dessous contient toutes les données nécessaires pour calculer les paramètres dont vous avez besoin. Je suis tellement paresseux que je ne peux même pas taper sur les touches...

Vous pouvez trouver ce dont vous avez besoin et le modifier vous-même... Le code lui-même est si simple et accessible que personne n'aura de mal à le refaire...

Une question...

Pourquoi avez-vous besoin d'un commerce comme celui d'Hitler à la fin de la guerre... Il recrutait des enfants dans les Jeunesses hitlériennes, pour ainsi dire, de la viande pour un tir de cartouche Faust...

Cela ne sonne pas comme une cloche ?????

IMHO, bien sûr...


Merci !

Je ne vais pas ouvrir avec le volume maximum, il faut juste le calculer en fonction de la taille du dépôt, pour d'autres opérations mathématiques =))

 
Noterday:

Merci !

Je ne vais pas ouvrir avec le volume maximum, j'ai juste besoin de le calculer en fonction de la taille de la Depo pour d'autres opérations mathématiques =))



pour BUY :

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2)

A vendre :

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2) ;

lot - la variable contenant le volume de l'ordre

le résultat du calcul doit être vérifié pour >0

https://www.mql5.com/ru/search

 
IgorM:


pour BUY :

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2) ;

A vendre :

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2) ;

lot - variable avec le volume de la commande

https://www.mql5.com/ru/search

... Eh bien, Igor, tu es pressé... :)

Avant que j'aie eu le temps de poser mes doigts sur le clavier, tu m'avais déjà répondu... :)

 
Merci à tous !
 

Salut !

Pouvez-vous suggérer un code ou une branche sur la façon de mémoriser les croisements de lignes d'indicateurs avec le prix. J'ai vu cela quelque part, mais je ne le trouve pas. Je l'ai vu quelque part mais je ne le trouve pas.

Je ne sais pas si je suis intéressé, mais je suis plus intéressé par quelque chose comme ça :

int start()

  { 

 double LineX = iCustom ("EURUSD", Period_H1, "Indicator",0,0);

 double lineY = iCustom ("EURUSD", Period_H1, "Indicator",1,0);

double priceA = Ask;

double priceB = Bid;

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;

// а так же еще определить, какое пересечение последнее, а какое предпоследние 

// intersectionX = последнее пересечение и на оборот
// intersectionY = предпоследние пересечение и на оборот

// то есть я понимаю логику, а  вот связать в коде не могу.
 
//произошло intersectionX,   то intersectionFirst = intersectionX; intersectionSecond = intersectionY;

// произошло intersectionY, то intersectionFirst = intersectionY; intersectionSecond = intersectionX;


 }
 
belck:

Salut !

Pouvez-vous suggérer un code ou une branche sur la façon de mémoriser les croisements de lignes d'indicateurs avec le prix. J'ai vu cela quelque part, mais je ne le trouve pas. Je l'ai vu quelque part mais je ne le trouve pas.

je veux savoir si la ligne de l'indicateur a traversé le prix, mais c'est ce qui m'intéresse le plus :


tout croisement est mieux considéré comme une différence entre le prix (Ask/Bid) et la ligne de l'indicateur, c'est-à-dire

si (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Prix supérieur à l'indicateur") ; sinon Comment("Prix inférieur à l'indicateur") ;

Si vous comparez la différence de ces valeurs, vous n'avez pas besoin de les normaliser pour une comparaison correcte.

En particulier, pour répondre à votre question, le franchissement de la ligne de l'indicateur par le prix correspond au moment où la différence Ask- -iCustom() était inférieure à zéro lors du calcul précédent et a ensuite augmenté, ou vice versa.

La façon dont vous calculez ce moment est votre propre affaire - peut-être sur la barre précédente, ou chaque tick, mais de telles combinaisons :

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;
Vous serez entraîné dans le labyrinthe des mathématiques discrètes plus vite que vous n'obtiendrez le résultat souhaité - l'expression entre parenthèses sera soit 0 soit 1, ce qui correspond à la représentation numérique de faux et de vrai.
 
IgorM:


tout croisement est considéré de manière optimale comme la différence entre le prix (Ask/Bid) et la ligne d'indicateur, c'est à dire

si (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Price above indicator") ; sinon Comment("Price below indicator") ;

Si vous comparez la différence de ces valeurs, vous n'avez pas besoin de les normaliser pour une comparaison correcte.

En particulier, pour répondre à votre question, le franchissement de la ligne de l'indicateur par le prix correspond au moment où la différence Ask- -iCustom() était inférieure à zéro lors du calcul précédent et a ensuite augmenté, ou vice versa.

La façon dont vous calculez ce moment ne regarde que vous - que ce soit sur la barre précédente, ou à chaque tic, mais de telles combinaisons :

Vous serez entraîné dans le labyrinthe des mathématiques discrètes plus vite que vous n'obtiendrez le résultat souhaité - l'expression entre parenthèses sera soit 0 soit 1, ce qui correspond à la représentation numérique de faux et de vrai.

C'est-à-dire que, si je comprends bien, je peux le faire :

bool intersectionX = FALSE,
     intersectionY = FALSE;
int start()

  { 
if  (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) == 0)  {
intersectionX = TRUE;
intersectionY = FALSE;
}
if  (iCustom ("EURUSD", Period_H1, "Indicator",1,0)-Bid == 0) {
intersectionY = TRUE;
intersectionX = FALSE;
}
}
и я потом смогу intersectionY использовать только тогда когда оно TRUE, если FALSE, то такой код (intersectionY > Ask) не сработает, правильно я понимаю!?
Raison: