[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 226

 
Roger:
Vous avez vraiment un problème avec la logique. D'abord, vous autorisez les ordres en attente autant que vous le souhaitez, puis vous voulez tous les supprimer après l'ouverture de l'un d'entre eux, et ensuite vous êtes surpris que tous les nouveaux ordres en attente soient supprimés. Continuez ensuite à réfléchir à ce qui devrait se passer après le déclenchement du prochain ordre en attente. L'algorithme en dépendra.

Merci de corriger mes pensées, je suis déjà bloqué.

Après le premier ordre en attente (disons baillimit), d'autres ordres en attente peuvent être placés dans la même direction, mais comment supprimer toutes les positions et tous les ordres d'achat lorsque le signal apparaît dans la direction opposée (disons selimit) ?

 

Bonsoir ! Excusez-moi, je voudrais revenir sur un problème non résolu.

if (!Pishem&&PozyProstavleny){SaveArray(FileBuy, Buy); SaveArray(FileSell, Sell); Pishem=1;}

'Acheter' - Types incompatibles D:\TeleTRADE\experts\cleaner.mq4 (102, 53)

Vendre' - types incompatibles D:\TeleTRADE\experts\clearlist.mq4 (102, 79)

//записать

void SaveArray(string File, double &a[])
{
    int h = FileOpen(File, FILE_BIN|FILE_WRITE);
    if(h>0)
    {
      int sz = ArraySize(a); 
      FileWriteArray(h,a,0,sz);
      FileClose(h);
    }
}

//прочитать

void OpenArray(string File, double &a[], int sz)
{
    int h = FileOpen(File, FILE_BIN|FILE_READ);
    if(h>0)
    {
      ArrayResize(a,sz);
      FileReadArray(h,a,0,sz);
      FileClose(h);
    }
}
 
 
Parce qu'alors le dialogue n'a pas vraiment fonctionné...
 
int Buy[];int Sell[];       string FileBuy="FileBuy.csv",FileSell="FileSell.csv";         

 
Bonjour, Pourriez-vous me dire comment écrire une variable globale bool par exemple bool=uroven_1=false; comment écrire ceci dans une variable globale pour qu'elle ait une nouvelle valeur après un redémarrage du terminal, merci.
 
laveosa:
Bonjour, Pourriez-vous me dire comment écrire une variable globale bool par exemple bool=uroven_1=false; comment écrire ceci dans une variable globale pour qu'elle ait une nouvelle valeur après un redémarrage du terminal, merci.


https://book.mql4.com/ru/variables/globals
 
Roger:


La logique est correcte - il devrait y avoir autant de numéros de position dans les ordres qu'il y a d'ordres, une fois que l'un est fermé, tous les autres sont recalculés. Essayez cette construction

Réponse.

Bonjour.
Malheureusement, la construction décrite ci-dessus ne nous donne pas le résultat requis. Je voudrais vous donner le code du programme et les entrées du journal du testeur.
Respectueusement. Shurkin
Le 18 mars 2013.

Код программы.

//+------------------------------------------------------------------+
//|                                                     Poligon1.mq4 |
//|                                            21 февраля 2013 года. |
//|Тестирование оператора цикла for.                                 |
//+------------------------------------------------------------------+
#property copyright "21 февраля 2013 года."
#property link      ""
//+------------------------------------------------------------------+
//|Объявленные переменные                                            |
//+------------------------------------------------------------------+
int Mn=357;//Magic number
int i;//Показатель счётчика итераций
double PriTP;//TP серии
int Tick;//Счётчик тиков
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----Установка серии ордеров
OrderSend(Symbol(),OP_BUY,0.5,Ask,0,NormalizeDouble(Bid-35*Point,Digits),
NormalizeDouble(Ask+35*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1,Ask,0,NormalizeDouble(Bid-25*Point,Digits),
NormalizeDouble(Ask+25*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,1.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,2.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUY,3.5,Ask,0,NormalizeDouble(Bid-15*Point,Digits),
NormalizeDouble(Ask+15*Point,Digits),NULL,Mn,0,CLR_NONE);//OP_BUY
OrderSend(Symbol(),OP_BUYLIMIT,1,NormalizeDouble(Ask-15*Point,Digits),0,
NormalizeDouble(Bid-40*Point,Digits),NormalizeDouble(Ask+25*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_BUYLIMIT
OrderSend(Symbol(),OP_SELLSTOP,3,NormalizeDouble(Ask-30*Point,Digits),0,
NormalizeDouble(Bid+15*Point,Digits),NormalizeDouble(Ask-75*Point,Digits),
NULL,Mn,0,CLR_NONE);//OP_SELLSTOP
//----
   PriTP=Bid;//PriTP
   Print("Кс0:"," OrdersTotal=",OrdersTotal());//Сообщение
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Tick++;//Tick
//   Print("Кс0:"," Tick=",Tick);//Сообщение
//----
//   for(i=0;i<OrdersTotal();i++)//Инициализация цикла
//   for(i=OrdersTotal()-1; i>=0; i--)//
   for(i=0, int k=0; i<OrdersTotal();i++,k++)//
   {
   Print("Кс1:"," Tick=",Tick," i=",i," k=",k);//Сообщение
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)//Выбор ордера i
    {
   if(OrderSymbol()==Symbol())//Символ
     {
   if(OrderMagicNumber()==Mn)//Идентификационное число
      {
   if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)//Тип операции текущего выбранного ордера
       {
   OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);//Закрытие позиции
   k--;//Зачем сначала прибавлять и тут же убавлять ???
       }//Закрыто if(OrderType()==OP_BUY && OrderTakeProfit()>PriTP)
      }//Закрыто if(OrderMagicNumber()==Mn)
     }//Закрыто if(OrderSymbol()==Symbol()
    }//Закрыто if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
   }//Закрыто for(i=0;i<OrdersTotal();i++)
//----
   return(0);
  }
//+------------------------------------------------------------------+
Записи в журнале тестера.
2013.03.18 09:42:48 2013.02.11 12:16  Poligon1 EURUSD,M15: Кс1: Tick=5 i=1 k=1
2013.03.18 09:42:48 2013.02.11 12:16  Poligon1 EURUSD,M15: Кс1: Tick=5 i=0 k=0
2013.03.18 09:42:24 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=4 i=1 k=1
2013.03.18 09:42:24 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=4 i=0 k=0
2013.03.18 09:42:00 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=3 i=1 k=0
2013.03.18 09:42:00 2013.02.11 12:15  Poligon1 EURUSD,M15: close #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3393
2013.03.18 09:42:00 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=3 i=0 k=0
2013.03.18 09:41:36 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=2 i=2 k=1
2013.03.18 09:41:36 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=2 i=1 k=0
2013.03.18 09:41:36 2013.02.11 12:15  Poligon1 EURUSD,M15: close #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 at price 1.3394
2013.03.18 09:41:36 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=2 i=0 k=0
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=1 i=3 k=0
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: close #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=1 i=2 k=0
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: close #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 at price 1.3395
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=1 i=1 k=0
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: close #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 at price 1.3395
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс1: Tick=1 i=0 k=0
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: Кс0: OrdersTotal=7
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #7 sell stop 3.00 EURUSD at 1.3367 sl: 1.3410 tp: 1.3322 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #6 buy limit 1.00 EURUSD at 1.3382 sl: 1.3355 tp: 1.3422 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #5 buy 3.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #4 buy 2.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #3 buy 1.50 EURUSD at 1.3397 sl: 1.3380 tp: 1.3412 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #2 buy 1.00 EURUSD at 1.3397 sl: 1.3370 tp: 1.3422 ok
2013.03.18 09:41:12 2013.02.11 12:15  Poligon1 EURUSD,M15: open #1 buy 0.50 EURUSD at 1.3397 sl: 1.3360 tp: 1.3432 ok
2013.03.18 09:41:12 Poligon1 test started
2013.03.18 09:40:59 Poligon1: loaded successfully

 
barok2:

Lors du test du conseiller expert WOC0.1.2 dans le testeur MT4 (application sur MT4 de Forex Club), les étiquettes des ordres sur le graphique sont au-dessus des prix, c'est-à-dire que les transactions ont été exécutées aux prix qui n'ont pas eu lieu. C'est un problème de testeur ? Peut-on le corriger d'une manière ou d'une autre ?

http://s017.radikal.ru/i405/1303/61/959038aaf1a9.jpg

Et autre chose : dans le mode de visualisation du testeur, certaines opérations sont exécutées, mais sans lui elles ne le sont pas.


Je l'ai compris tout seul. C'est à cause de l'augmentation de la diffusion (81) sur le testeur pendant les week-ends.
 
Shurkin:
C'est parce que tu as mal copié mon exemple. Regardez bien où est le i et où est le k.
 

J'ai besoin de votre aide (pli-is). Je veux créer une fonction dans mon EA qui affiche une notification dans le coin arrière de l'écran sur la tendance actuelle sur différentes échelles de temps et le renversement à venir. J'utilise mes fonctions LinearRegression et Diverg à cette fin, mais je n'ai jamais travaillé avec la fonctionComment et je ne peux donc pas comprendre où j'ai fait une erreur. Quoi qu'il en soit, à la suite du code suivant, l'inscription "Trend W = Down" est affichée, mais je veux avoir des informations sur d'autres TFs également.

void UPDN ()
{
if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) < 0) Comment("Trend H1 = Up") ;
if(Diverg(LR_TFr_1,0,Diver_Per_H1)<0) Comment("... !Pivot sur H1 = Down") ;
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) < 0) Comment("Tendance H4 = Up") ;
if(Diverg(LR_TFr_2,0,Diver_Per_H4)<0) Comment("... !Pivot sur H4 = Down") ;
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) < 0) Comment("Trend D1 = Up") ;
if(Diverg(LR_TFr_3,0,Diver_Per_D1)<0) Comment("...Pivot sur D1 = Down") ;
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) < 0) Comment("Trend W = Up") ;
if(Diverg(LR_TFr_4,0,Diver_Per_W)<0) Comment("... !Pivot vers W = Down") ;

if(LinearRegression(Symbol( ), LR_TFr_1, 0, Diver_Per_H1, 0) > 0) Comment("Trend H1 = Down") ;
if(Diverg(LR_TFr_1,0,Diver_Per_H1)>0) Comment("....Pivot sur H1 = Up") ;
if(LinearRegression(Symbol( ), LR_TFr_2, 0, Diver_Per_H4, 0) > 0) Comment("Tendance H4 = Down") ;
if(Diverg(LR_TFr_2,0,Diver_Per_H4)>0) Comment("... !Pivot sur H4 = Up") ;
if(LinearRegression(Symbol( ), LR_TFr_3, 0, Diver_Per_D1, 0) > 0) Comment("Trend D1 = Down") ;
if(Diverg(LR_TFr_3,0,Diver_Per_D1)>0) Comment("... !Pivot sur D1 = Up") ;
if(LinearRegression(Symbol( ), LR_TFr_4, 0, Diver_Per_W, 0) > 0) Comment("Trend W = Down") ;
if(Diverg(LR_TFr_4,0,Diver_Per_W)>0) Comment("....W = Up") ;
return(0) ;
}