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

 
Valeriy Yastremskiy:

L'ordre de sélection sur le ticket a été fait précédemment. L'ordonnance est en cours. Comment faire pour que l'ordre soit négociable, autrement qu'en vérifiant le type d'ordre à chaque tick. Dans les journaux, cette heure est enregistrée, mais il semble que le champ pour cette heure dans la structure de l'ordre n'est pas fourni, ou est-ce que je me trompe ? Lorsque nous changeons le type de commande, OrdersTotal() et OrdersHistoryTotal ne changent pas non plus, si je comprends bien.

Le reste des questions me semble clair).

Avez-vous essayé OrderOpenTime ? Je ne me souviens même pas s'il change lorsqu'une position est déclenchée.

Je ne sais pas quand il est nécessaire de vérifier si l'ordre en attente s'est déclenché à chaque tick(et non avant une action clé ou toutes les 1...5 min), mais MT4 n'a pas d'autre moyen.

Dans MT5, c'est plus pratique. Dans OTT, vous vous renseignez sur la transaction, si vous devez travailler avec des listes, vous effectuez le traitement dans OTT.

 
datetime some_time=TimeCurrent();

extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)

extern double P=15;       //Таймфрейм

int start()

{

//Инициализация переменных

bool  FractalsUp=false;

bool  FractalsDown=false;

int   FractalsUpPrice=0;

int   FractalsDownPrice=0;

int   FractalsLimit=100;

double EMA=iMA(NULL,P,5,3,MODE_EMA,PRICE_CLOSE,0);

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for (int i=FractalsLimit; i>=0; i--)

{

      //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

      double fu=iFractals(NULL,0,MODE_UPPER,i);

      double fl=iFractals(NULL,0,MODE_LOWER,i);

      //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

      if(fu>0)

{

FractalsUp=true;

FractalsDown=false;

FractalsUpPrice=fu;



if (((Close[0])>fu)&&(OrdersTotal() == 0)&&(Close[0]>Open[0])&&(Close[0]>High[1]&&(Close[0]>EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd=OrderCloseTime();

int hd=+iBarShift(Symbol3,P,Cd)+1;

if (hd<=2)

{

return(-1);

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

      if(fl>0)

{

FractalsUp=false;

FractalsDown=true;

FractalsDownPrice=fl;

if (((Close[0])<fl)&&(OrdersTotal() == 0)&&(Close[0]<Open[0])&&(Close[0]<Low[1]&&(Close[0]<EMA))) 

{  

if ((OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS, MODE_HISTORY)==true))

{

datetime Cd1=OrderCloseTime();

int hd1=+iBarShift(Symbol3,P,Cd1)+1;

if (hd1<=2)

{

return(-1);

}

}

metka2();

}

}

      //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

      if(fu>0 && fl>0)

{

         FractalsUp=false;

         FractalsDown=false;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return(0);

}

int metka1()

{              

int send1=OrderSend(Symbol3,OP_BUY,0.01,Ask,3,Bid-70*Point,Bid+70*Point);

return(0);

}

int metka2()

{                        

int send2=OrderSend(Symbol3,OP_SELL,0.01,Bid,3,Ask+70*Point,Ask-70*Point);

return(0);

}

Bonjour !

Je travaille sur une chouette sur les fractales. Il y a un problème. Aide. L'essence est la suivante :

Le script recherche la dernière fractale supérieure ou inférieure sur les 100 derniers chandeliers avec la variable [FractalsLimit=100 ;] et ouvre une position ACHETEUSE - si une fractale est franchie, et vice versa pour la VENTE.

Les 100 derniers chandeliers doivent être utilisés pour trouver les fractales maximales ou minimales et ouvrir une position. Cela signifie qu'il se concentre uniquement sur les fractales maximales et minimales, et non sur les dernières.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin:

Avez-vous essayé OrderOpenTime ? Je ne me souviens pas s'il change lorsqu'un ordre en attente est déclenché.

Je ne sais pas quand il est nécessaire de vérifier à chaque tick(et non avant les actions clés ou toutes les 1...5...minutes) si un ordre en attente s'est déclenché, mais il n'y a pas d'autre moyen de le faire dans MT4.

Dans MT5, c'est plus pratique. Dans OTT, vous apprenez à effectuer une transaction. Si vous devez travailler avec des listes, vous effectuerez le traitement dans OTT.

OrderOpenTime indique l'heure d'ouverture de l'ordre en attente. Il s'agit de mieux comprendre le fonctionnement. Ainsi, l'heure est inscrite dans le journal et dans l'agenda et n'apparaît nulle part ailleurs. Respectivement, si nous ne l'avons pas corrigé, alors nous pouvons le visualiser plus tard, selon le fait))))).

Si je comprends bien, il s'agira de l'ouverture d'une position / transaction dans MT5. Bien que je ne comprenne pas la division en ordre/échange/position comme une solution optimale, mais il y a plus de données, bien sûr.

 
Aleksey Mavrin:

cela arrive)) 1 se perd beaucoup dans le fond des lettres anglaises l i etc., il est plus commode d'appeler alors les suffixes 001, 2... etc.

Je vois ce que vous voulez dire) j'ai corrigé l'erreur, maintenant la valeur de la deuxième poignée est 1,0. Si vous mettez un délai plus grand dans la première poignée que dans la deuxième poignée, la valeur de la deuxième poignée est 0. Pouvez-vous me dire ce que je dois encore corriger pour que la valeur de la deuxième poignée soit correcte ?

void OnTick()
  {
   double PriceArray[];
   
   int AOhandle = iAO(_Symbol,PERIOD_M15);
   
   ArraySetAsSeries(PriceArray, true);
   
   CopyBuffer(AOhandle, 0, 0, 3, PriceArray);
   
   double AOvalue = NormalizeDouble(PriceArray[0], 6);

   double PriceArray01[];
   
   int AOhandle01 = iAO(_Symbol,PERIOD_H1);
   
   ArraySetAsSeries(PriceArray01, true);
   
   CopyBuffer(AOhandle01, 1, 0, 3, PriceArray01);
   
   double AOvalue01 = NormalizeDouble(PriceArray01[0], 6);
    
   Comment ("Awesome Oscillator Value: ", AOvalue, "\n", "\n",
            "Awesome Oscillator Value: ", AOvalue01);
  }
 
Valeriy Yastremskiy:

OrderOpenTime indique l'heure d'ouverture de l'ordre en attente. Il s'agit de mieux comprendre le fonctionnement. Il s'avère que l'heure est enregistrée dans le registre et le journal et ne se reflète nulle part ailleurs. En conséquence, si nous ne l'avons pas fixé, alors nous pouvons regarder plus tard, selon le fait))))).

Cela fait une semaine que vous soulevez cette question. J'ai proposé de revoir les principes de passation des ordres dans la stratégie de négociation.

mais si cette question est importante pour vous, ce n'est pas un problème de la "régler" avec un réajustement d'un tick.

Si vous voulez l'essayer, vous devrez le faire avec une certaine vitesse, mais si vous n'avez pas de tick réel, vous finirez probablement par avoir beaucoup d'erreurs, car la vitesse de passage des ordres en attente est beaucoup plus élevée.


Ce que je voudrais proposer d'étudier, c'est leCArrayInt SB https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint.

dans CArrayInt vous ajouterez des tickets et ce type de données vous permettra de supprimer facilement les "tickets devenus commercialisables".


comme je l'ai écrit ci-dessus la précision - 1 tick, le code de contrôle sera minimal

Valeriy Yastremskiy:

Dans MT5, il s'agira d'une ouverture de position ou de transaction, si je comprends bien. Bien que je ne comprenne pas la division en ordre / transaction / position comme une solution optimale, mais il y a plus de données bien sûr.

Si vous pouvez écrire pour MT5 - alors pourquoi en discutons-nous ? La plateforme est plus puissante, les fonctionnalités sont plus élevées - comparer MT4 et MT5 n'a aucun sens, MT4 est plus facile à entrer, mais MT5 a plus de fonctionnalités.

 
Igor Makanu:

Vous avez soulevé cette question depuis une semaine, je vous ai suggéré de reconsidérer les principes de placement des ordres dans la stratégie de trading.


Je ne comprends toujours pas. La stratégie est bien sûr différente. La question vient du fait qu'un événement assez important n'est reflété que dans le journal. Et personne n'a répondu directement qu'il n'y a nulle part que le journal du moment où un ordre est devenu commercialisable)))).

Et la logique de la stratégie ne dépend pas du terminal. Si la logique est boiteuse, vous pouvez certainement l'inventer, mais la boite ne disparaîtra pas)))).

 
Valeriy Yastremskiy:

La situation n'est pas claire. La stratégie est bien sûr différente. La question vient du fait qu'un événement assez important n'est reflété que dans le journal. Et personne n'a répondu directement qu'il n'y a rien d'autre que le journal du moment où l'ordre est devenu market)))).

non cette information - nooooo !!!

importance... il est important pour vous, avant cela, combien d'années d'écriture de stratégies et comment cela a fonctionné, même dans le profit ;)

en règle générale, ne pas placer beaucoup d'ordres en attente, suivre les ordres du marché, si nécessaire, ajouter un ordre en attente - les ordres en attente deviennent des ordres du marché

nous utilisons tout - moyenne, pyramide, grille d'ordres et ... et beaucoup... Je ne me souviens pas de ces pitreries sur les forums de commerçants, je ne les lis plus depuis plus d'un an - j'ai plus mes propres pensées que celles des autres ;)))

 
Igor Makanu:

il n'y a pas de telles informations - nooooon ! !!

importance... bien c'est important pour vous, avant cela, combien d'années d'écriture d'une stratégie et elle fonctionnerait, même en profit ;)

en règle générale, vous ne devriez pas placer beaucoup d'ordres en attente, suivez les ordres du marché, si nécessaire, ajoutez un ordre en attente - les ordres en attente deviennent des ordres du marché

nous utilisons tout - moyenne, pyramide, grille d'ordres et ... et beaucoup... Si vous ne le savez pas, vous devriez lire ces astuces sur les forums de commerçants, je ne l'ai pas fait depuis plus d'un an - j'ai plus de pensées personnelles que d'autres ;))).

Merci))))

Martin et le calcul de la moyenne est une auto-illusion et est prohibitif (parce que vous ne pouvez ni calculer ni prédire le risque par la définition des propriétés de la BP))))) risque, qui parfois, mais seulement parfois, est justifié)))).

Si la stratégie est correcte, un seul ordre suffit)))).

 
Valeriy Yastremskiy:

Si la stratégie est correcte, un seul ordre suffit)))).

Si dans votre TS le nombre d'ordres est strictement défini, alors vous ne devriez pas avoir de problèmes pour déterminer ce qui est arrivé aux ordres en attente sur le tick actuel.

Connaître l'heure exacte ne vous donnera rien - toutes les informations sont reçues à l'arrivée de la coche - pas de coche, pas d'information.

 

Bonjour, Je suis confronté à un problème, comment changer les paramètres d'un indicateur personnalisé à partir d'un EA. Le problème est que lorsque je modifie un paramètre dans la liste des indicateurs, une nouvelle copie est créée. Lorsque je vais dans les propriétés de ces copies, chaque copie a son propre paramètre. Plus je modifie le paramètre, plus le nombre de copies créées augmente. Je l'utilise via iCustom.

Par exemple :

#resource "\Indicators\\\\\Ninicator.ex4"

extern Var1=1 ;

//------------------------------------------

void OnTick()

{

int A ;

Var1++ ;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\Nindicator",Var1,0,0) ;

En conséquence, nous voyons dans la liste des indicateurs :

Indicateur (avec le paramètre Var1=2)

Indicateur (avec le paramètre Var1=3)

Indicateur (avec le paramètre Var1=4)

.... etc.