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

 
Snower: La ligne jaune est le canal de prix que le prix devrait franchir, et que l'ordre serait ouvert avec une bougie en forme de smiley, et toutes celles qui précèdent seraient ignorées.

dans votre morceau de code, le canal de prix channel_top et channel_bottom est-il défini ci-dessus ? Où se trouve la définition d'une barre d'épingle ?

 
Vitaly Muzichenko:

Réponse

Artyom, vous n'avez pas lu attentivement : le TS ne doit s'ouvrir que lors de la rupture d'une barre d'épingle, respectivement, si vous prescrivez une barre d'épingle (petit corps et grandes ombres), la condition peut être remplie.

Vitaly, c'est à cela que je répondais :

...et a ignoré tous ceux qui l'ont précédé...

Si toutes celles qui ont précédé étaient des barres d'épingle, alors comment pouvez-vous les ignorer quand elles étaient actuelles, les barres d'épingle franchissaient la ligne ?

 
Sergey Likho:

Comment la fonction iCustom est-elle gérée dans MT4 ? Veuillez répondre à ceux qui sont au courant !


Dans le testeur de stratégie, par exemple, un EA appelle l'indicateur à chaque tick.

Lorsque la fonction est appelée, l'indicateur est chargé dans la mémoire, recalcule toutes les valeurs de la barre zéro aux barres et renvoie ensuite la valeur au décalage requis.

Si je demande la valeur de la première barre au premier tick et la valeur de la deuxième barre au deuxième tick, alors mon Expert Advisor calculera l'indicateur deux fois sur l'historique complet ?


Si le Conseiller Expert accède à l'indicateur1, et qu'il a iCustom à l'indicateur2. Combien de fois l'indicateur2 sera-t-il recalculé lors de la demande de la valeur de l'indicateur1?


Peut-être que le Strategy Tester et le terminal MT4 stockent les valeurs des indicateurs sur chaque barre, afin de ne pas avoir à les recalculer à chaque demande répétée ?

Tout dépend de la réalisation de l'indicateur. Si le calcul est correct, alors l'indicateur ne calcule que la barre actuelle - les autres ont été calculées à (rates_total-prev_calculate)>1

 

Comment calculer la moyenne de iMAOnArray sur un tableau s'il y a des valeursEMPTY_VALUE dans le tableau ?

 
Максим Дмитриев:

Comment calculer la moyenne de iMAOnArray sur un tableau s'il y a des valeursEMPTY_VALUE dans le tableau ?


Si au moins une valeur de l'échantillon de calcul de la moyenne estEMPTY_VALUE, alors la valeur de iMAOnArray à cet endroit est égalementEMPTY_VALUE.

 

Bonne journée à vous tous. Je teste un EA. Je ne vais pas faire du commerce avec, mais seulement vérifier une certaine régularité. L'EA ouvre un ordre sur chaque chandelier minute et si l'ordre est fermé sur un SL, il ouvre un autre ordre BUY au prix de clôture sur un SL.


int start()                                             
{
if(Bid == iOpen(NULL,PERIOD_M1,0))
if ( G != Minute() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,Y10,123 );
G  =  Minute();
}
////*******   Если в списке закрытых ордеров есть ордер закрытый по СЛ - открыть другой ордер
int Счетф=0,  Номерф=OrdersHistoryTotal()-1;
for( ; Номерф>=0; Номерф--)
{
if(!OrderSelect(Номерф, SELECT_BY_POS, MODE_HISTORY)) continue;
if(OrderProfit()>=0) break;
Счетф++;
if(Счетф>0)
if(TimeCurrent()==OrderCloseTime())
OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-400*Point,Bid+200*Point,Y11,123 );
}
return;
}

Leproblème est que... Si plusieurs ordres sont fermés sur un tick et que le dernier ordre est fermé sur un PI, l'ordre BUY dont j'ai besoin n'est pas ouvert. Cela est dû au fait que le programme pense que le dernier ordre a été clôturé par un TP et non par un SL. Voici un exemple d'une telle situation

13:38:15.859 2008.01.02 15:01:46 Tester : stop loss #232 à 1.46566 (1.46560 / 1.46562)

13:38:15.859 2008.01.02 15:01:46 Tester : stop loss #233 à 1.46566 (1.46560 / 1.46562)
13:38:15.859 2008.01.02 15:01:46 Tester : take profit #302 à 1.46562 (1.46560 / 1.46562)
13:38:15.859 2008.01.02 15:02:00 MACD Sample EURUSD,M1 : open #347 sell 0.10 EURUSD at 1.46570 sl : 1.46972 tp : 1.46372 ok
Pourriez-vous m'expliquer quelle structure de langage doit être utilisée pour ouvrir un ordre d'ACHAT sur un tick juste après la fermeture de l'ordre SL sur le même tick que l'ordre SL.

Merci.

 

Bonjour !

Je me suis déjà creusé les méninges. Comment puis-je vérifier si un certain prix se trouve dans le tableau double ?

Je l'ai écrit comme ça pour le test :


double prmas[5] = {11,22,33,44,99};

ArrayBsearch(prmas,OrderOpenPrice(),WHOLE_ARRAY,0,MODE_ASCEND));


Le script trouve 11, 22, 33, 44 sans aucun problème (le terminal a de tels ordres). Cependant, si le script traite le prix de 45, par exemple, il affiche toujours 3 (position du prix 44 dans le tableau).

Ce dont j'ai vraiment besoin, c'est d'un bool - s'il y a un prix de l'ordre en cours de traitement dans le tableau, il doit retourner true, sinon, il doit retourner false. Mais je n'ai pas encore trouvé une telle fonction dans la langue.

 

Bon après-midi. Pouvez-vous me dire pourquoi le fichier n'est pas créé et les données ne sont pas écrites :

   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string file_name=terminal_data_path+"\\MQL4\\Files\\VolC(Symbol(),Period())";
   int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);
   FileClose(file_handle);
 
YarTrade: Bon après-midi. Pouvez-vous me dire pourquoi le fichier n'est pas créé et les données n'y sont pas écrites ?

Examinez attentivement le dossier Files !!! Toujours écrire dans le bac à sable = Dossier de fichiers . Essayez de cette façon :

   string file_name=VolC(Symbol(),Period());  // А кто такой ВолК = VolC  ???
   int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);
   FileClose(file_handle);
 
STARIJ:

Examinez attentivement le dossier Files !!! Toujours écrire dans le bac à sable = Dossier de fichiers . Essayez comme ça :


VolC - J'ai nommé le fichier de cette façon. Le nom du fichier n'est-il pas nécessaire ?

Raison: