Questions des débutants MQL5 MT5 MetaTrader 5 - page 852

 

Il n'ouvre pas un commerce, où est la faute ?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

Il n'ouvre pas le commerce, où est le bug ?

Bug numéro 1 : A chaque tick vous créez un NOUVEL indicateur HANDL

Haut-fond numéro 2 : (probablement) la variable Lot a un volume incorrect.

Défaut numéro 3 : (probablement) le type de remplissage de l'ordre pour la classe CTrade n'est pas rempli.


En général, que contient le journal du terminal (ou du testeur) ?

 
Kirill Belousov:

le montant multiplié par la perte en devises du 1 SL

Et si la perte est de 1, dans BO par exemple.

J'ai mis les valeurs dans la formule, mais le résultat est loin d'être le même.

Qu'est-ce qui ne va pas ?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

Gap numéro 1 : A chaque tick vous créez un NOUVEL indicateur HANDL

Haut-fond numéro 2 : (probablement) la variable Lot a un volume incorrect.

Défaut numéro 3 : (probablement) le type de remplissage de l'ordre pour la classe CTrade n'est pas rempli.


Quoi qu'il en soit, qu'y a-t-il dans le journal du terminal (ou du testeur) ?

Ce code oui était dans onitics

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

Je l'ai déplacé vers les onytiques. Je viens de lire les articles ici - et j'ai compris qu'il n'y a pas de différence pour le travail, mais que c'est mieux en onitiket. Mais en termes de clarté pour moi, il était plus pratique de tout faire en 1 bloc, je suis purement pour moi tout en résolvant des problèmes que je me fixe (apprentissage.)

Le problème se situait au niveau du lot - je devais mettre non pas une variable lot - mais la fonction returnlot (car c'était une fonction de calcul du lot).

Maintenant j'ai trouvé une erreur dans la fonction lot - le lot est calculé avec beaucoup de décimales et en conséquence l'ordre ne peut pas être ouvert. Nous devons réduire les caractères inutiles et n'en laisser que 2.

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDouble et DoubleToStr jusqu'à présent ne peut pas travailler - écrit que la fonction ne peut pas être placé dans la fonction, et ci-dessous lorsque je mets leur travail avec la fonction écrit l'erreur - que je ne peux pas fixer.


 
Askr:

Ce code était en onitique.

Déplacé dans l'ontique. Je viens de lire les articles ici - et d'après eux j'ai compris qu'il n'y a pas de différence pour le travail, mais que c'est mieux en ontiket. Mais en termes de clarté pour moi, il était plus pratique de tout faire en 1 bloc, je suis purement pour moi tout en résolvant des problèmes que je me fixe (apprentissage.)

Le problème se situait au niveau du lot - je devais mettre non pas une variable lot - mais la fonction returnlot (car c'était une fonction de calcul du lot).

Maintenant j'ai trouvé une erreur dans la fonction lot - le lot est calculé avec beaucoup de décimales et en conséquence l'ordre ne peut pas être ouvert. Nous devons réduire les caractères inutiles et n'en laisser que 2.

Lorsque je colle la fonction NormalizeDouble et DoubleToStr, je ne peux pas encore le faire - il est dit que la fonction ne peut pas être mise dans une fonction, et lorsque je les colle en dessous, la fonction écrit des erreurs que je ne peux pas corriger.


Dans MQL5, vous devez créer un handle d'indicateur UNIQUEMENT une fois et UNIQUEMENT dans OnInit. C'est un axiome. Vous ne pouvez pas créer un handle d'indicateur sur chaque tick dans OnTick - c'est incorrect.

La normalisation correcte du lot se trouve dans la classe de commerce CSymbolInfo::NormalizePrice

 
Vladimir Karputov:

Dans MQL5, vous devez créer un handle d'indicateur UNIQUEMENT une fois et UNIQUEMENT dans OnInit. C'est un axiome. Vous ne pouvez pas créer un handle d'indicateur sur chaque tick dans OnTick - c'est DROIT.

La normalisation correcte du lot se trouve dans la classe de commerce CSymbolInfo::NormalizePrice

Faux, je ne discute pas de ça. MAIS ! !! Qu'est-ce qui changera si nous le créons à chaque tic-tac ? Même la valeur ne changera pas.

 
Alexey Viktorov:

Faux, il n'y a pas à discuter de ça. MAIS ! !! Qu'est-ce qui va changer si vous créez à chaque tic-tac ??? Même la valeur ne changera pas.

Quel est l'intérêt ? Juste beaucoup de travail supplémentaire pour le scénario, c'est tout.

 
Alexey Viktorov:

Faux, je ne le conteste pas. MAIS ! !! Qu'est-ce qui va changer si vous créez à chaque tic-tac ??? Même la valeur ne changera pas.

Dans un article récent, j'ai montré que MQL5 combat efficacement les vestiges du codage dans le style MQL4 - création de handles à chaque tick : la mémoire n'est pas gaspillée, mais la vitesse d'opération est au moins diminuée. Mais je le répète : la création d'indicateurs dans MQL5 dans le style MQL4 n'est pas la bonne méthode. Si vous passez à MQL5, cela signifie que le style de programmation doit être reconstruit.

 
Konstantin Nikitin:

Quel est l'intérêt ? C'est juste un travail supplémentaire pour le scénario, c'est tout.

Bien sûr, ça ne sert à rien. C'était une question tellement cachée drubashke : Pourquoi ressembler aux neurasthéniques, qui sont assez ici comme ça, et activer le verrouillage des majuscules ?

 

C'est-à-dire que le résultat est le même, mais bien sûr l'exécution n'a aucun sens et est beaucoup plus chargée, comme je le comprends d'après ce qui a été écrit.

J'aurais aimé qu'ils pensent à l'écrire dans l'article, mais en général, il est clair qu'il n'y a aucune raison de faire la même chose plusieurs fois.

Mais j'avais pour objectif d'écrire pour comprendre et travailler lui-même, pas pour optimiser - c'est après que j'ai compté.