[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 404

 
splxgf:
Mieux encore la première option, placer avant de tenter d'ouvrir un ordre (OrderSend)
Merci beaucoup ! Tout fonctionne :)
 
kolyango:

Toutes ces conditions peuvent ne pas se suivre immédiatement l'une après l'autre (peut-être dans une heure ou deux ou trois), donc nous devrions faire en sorte que dès que l'indicateur atteint 1.0000, cette condition ne soit pas vérifiée à chaque tick, et attendre qu'une barre se ferme avec une baisse, et après cela ces 2 conditions ne sont pas vérifiées à chaque tick, et attendre que l'indicateur atteigne 0.9980 ou égal. Dès que toutes les conditions sont remplies, nous ouvrons un ordre de marché pour vendre 0,1 lot avec un stop loss de 400p et un take profit de 400p.

En général, c'est correct, mais je ferais attention aux valeurs renvoyées par l'indicateur.

bool Val_max=false, Cl_dn=false, Val_min=false; 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int
   i, j, total,
   cnt,
   OrderBuy,
   OrderSell,
   Magic,
   Ticket,                                      // Номер ордера
   Total=0,                                     // Количество ордеров в окне
   Tip=-1;                                      // Тип выбран. ордера (B=0,S=1)      
   double
   Open_0,
   ask,
   bid,
   Price,                                       // Цена выбранного ордера
   SL,                                          // SL выбранного ордера
   TP,                                          // TP выбранного ордера
   Lot;                                         // Колич. лотов в выбран.ордере
   Open_0=Open[0];                             // Цена откр. формирующегося бара
   ask=Ask;                                    // Текущая цена покупки
   bid=Bid;                                    // Текущая цена продажи
   string
   Symb;                                        // Название финанс. инструмента
   Symb=Symbol();                               // Название фин.инстр.
double Value_max=1.0000;
double Value_min=0.9980;
double Open_1= Open[1];
double Close_1= Close[1];
//----

//--------------------------------------------------------------- 4 --

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max) Val_max=true;                  // 
if (Open_1 > Close_1 && Val_max==true) Cl_dn=true;
if (Val <= Value_min && Cl_dn==true) Val_min=true;
if (Val_max==true && Cl_dn==true && Val_min==true)
  {
   for (j = 0; j < OrdersTotal(); j++)
    {
     OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol())
      {
      if (OrderType() == OP_SELL) return(0);
      }
    }

   OrderSend(Symbol(),OP_SELL,0.1,NormalizeDouble(Bid,Digits),2,Bid+400*Point,Bid-400*Point,"",3,Red);  // Открытие SELL
   Val_max=false; Cl_dn=false; Val_min=false;
  }

//----
   return(0);
  }
 
splxgf:

Dans l'ensemble, c'est correct, mais je ferais attention aux valeurs renvoyées par l'indicateur.


Essayé en temps réel via Alert la valeur de l'indicateur, le message s'est affiché normalement :

double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
if (Val >= Value_max)
{
Alert("Значение индикатора >= 1.0000");
}
Lorsque la valeur a atteint 1,0000, le message suivant s'est affiché à chaque tick : " Valeur de l'indicateur >= 1,0000".
 
kolyango:


J'ai essayé la valeur en temps réel de l'indicateur via Alert, le message s'est affiché normalement :

Ensuite, ce que le testeur n'aime pas, vous devez ajouter des alertes et regarder le journal.
 
splxgf:
Ensuite, ce que le testeur n'aime pas, vous devez ajouter des alertes et regarder dans le journal de bord.

Le code est-il correct ?
 

Qu'est-ce que cela signifie ?

2011.12.06 01:07:55 HMR MULTI Indicateur EURUSD,M15 : supprimé

2011.12.06 01:07:57 TestGenerator : unmatched data error (volume limit 603 at 2011.12.01 00:00 exceeded)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicateur EURUSD,M15 : numéro de sous-fenêtre inconnu -1 pour la fonction ObjectCreate


 
kolyango:

Qu'est-ce que cela signifie ?

2011.12.06 01:07:55 HMR MULTI Indicateur EURUSD,M15 : supprimé

2011.12.06 01:07:57 TestGenerator : unmatched data error (volume limit 603 at 2011.12.01 00:00 exceeded)

2011.12.06 01:07:57 2011.12.01 00:00 HMR MULTI Indicateur EURUSD,M15 : numéro de sous-fenêtre inconnu -1 pour la fonction ObjectCreate


Il semble y avoir deux erreurs :
1. Il faut probablement déconnecter MT4 d'Internet, puis importer les données historiques.
2. Vous devez vérifier le code.

 
chief2000:
Il semble y avoir deux erreurs :
1. Vous devrez peut-être déconnecter MT4 d'Internet, puis importer des données historiques.
2. Vous devez vérifier le code.

... indicateur.

 int start(){
  double Val=iCustom(NULL, 0, "HMR MULTI Indicator",0,0);   
  Alert(Val);
}

Essayez la méthode de "l'intuition" avec un conseiller expert vide,

vérifier dans l'indicateur qu'ObjectCreate trouve sa sous-fenêtre (ou pourquoi la dessiner SI nous la testons OU l'OPTIMISONS)

if(IsTesting()||IsOptimization())флаг_Канады_не_рисовать_obj=true;          //проверяем надо ли рисовать (в ините ему место через статик переменную)
if(!флаг_Канады_не_рисовать_obj){                                           //запрет отрисовки объектов ели оптимизация или тестирование
ObjectCreate(........................);
}
 
granit77:
C'est-à-dire, s'il n'y a pas de transfert de paramètres, alors :

Merci pour vos réponses !
 

Bonjour !

Pouvez-vous me dire comment empêcher l'EA d'écrire des répétitions dans le fichier en utilisant le paramètre "Tool" (_OrderSymbol). J'ai vu sur le forum comment supprimer les répétitions https://forum.mql4.com/ru/5814 dans un tableau, mais je n'ai pas trouvé comment l'appliquer à ma situation. Et avec les répétitions, il commence à tamponner 200 lignes identiques dans un fichier, même en une seule boucle.

void TimeStr6() { 
   int i,handle,_ordertype;
   double _openprice,_orderLots,_OrderProfit;
   string _orderspread,_orderbalance,_OrderSymbol,_orderOpenTime,_orderOpenTime1;
   string tekTime=TimeToStr(CurTime(),TIME_DATE)+"_";
   string path=tekTime+"Оптимальный.csv";
//---------------------------
    handle=FileOpen(path,FILE_READ|FILE_WRITE);
    if (handle>0){
       FileWrite(handle,"Дата","Время","Инструмент","Баланс оптимальный"); 
       _orderOpenTime=TimeToStr(OrderOpenTime(),TIME_DATE);
       _orderOpenTime1=TimeToStr(OrderOpenTime(),TIME_SECONDS);
       _OrderSymbol=SymbolMax[nnnn];
       _orderbalance=DoubleToStr(StartBalance,0);
       FileSeek(handle,0,SEEK_END);
       FileWrite(handle,_orderOpenTime,_orderOpenTime1,_OrderSymbol,_orderbalance);
       FileClose(handle);
     }
   return;
}