Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 662

 
Quelqu'un a-t-il déjà un iMAOnArray RSI prêt à être utilisé ?
 
berezhnuy:
Quelqu'un a-t-il déjà un iMAOnArray RSI prêt à être utilisé ?

Je comprends pourquoi personne ne vous a répondu avec beaucoup d'"aide"...
 
berezhnuy:
Quelqu'un a-t-il déjà un iMAOnArray RSI prêt à être utilisé ?

il y en a un dans la kodobase, il suffit de le chercher.
 
Camarades. J'ai décidé de faire un simple affichage d'absorption pour m'entraîner. Mais finalement, il y a eu un problème : si je change l'horizon temporel sur le graphique et que je reviens à l'horizon temporel avec l'absorption, l'alerte se déclenche à nouveau. J'ai trouvé une option permettant de n'alerter qu'une fois par barre, mais là encore, tout se réinitialise lorsque je change d'horizon temporel.
if (Bars != ThisBarTrade ) {
   ThisBarTrade = Bars;  // ensure only one trade opportunity per bar
   // Trade logic goes here
}
Voici le code lui-même, sans dessins graphiques, seulement la logique. Comment le corriger ?
   if(engulfAlerter && Open[2]>Close[2] && Open[1]<Close[1] && Close[1]>Open[2])
      {
         Alert("Bullish Engulf");
      }
   if(engulfAlerter && Open[2]<Close[2] && Open[1]>Close[1] && Close[1]<Open[2])
      {
         Alert("Bearish Engulf");
      }
P.S. L'inducteur réinitialise la conditionnelle "ThisBarTrade" lors de la désinitialisation en passant à d'autres horizons temporels.
 

Pouvez-vous me dire comment séparer le billet pour l'achat et la vente séparément ?

ticket=OrderSend("EURUSD",OP_SELL,SellLot,Bid,3,0,0,",MAGICMA,0,Red) ;


sinon

{

OrderSelect(ticket-3,SELECT_BY_POS,MODE_TRADES) ;

OrdreClose(ticket-3,SellLot,Ask,3,Red) ;


}

ticket-3 spécialement, la transaction TK est une sorte de prix moyen sur plusieurs ordres) mais comment puis-je séparer les tickets d'achat des tickets de vente ? ainsi je peux prendre un ordre qui a été ouvert il y a 3 achats) Également pour vendre

 

Bonjour les amis !) J'ai un tel problème :

j'ai écrit un programme qui ouvre un modèle (avec les indicateurs et l'objet graphique dont j'ai besoin) au démarrage, puis analyse les données et effectue des transactions. lorsque je l'exécute simplement sur un graphique, tout fonctionne bien. lorsque je l'exécute dans un testeur, il ne fonctionne que lorsqu'il est visualisé. je comprends que le modèle ne peut être chargé que sur un graphique ouvert visuellement... donc ça ne fonctionne pas en mode test normal, car il s'exécute juste sur le graphique sans charger le modèle... et qu'en est-il de l'optimisation ? j'ai pas mal de paramètres, et d'une certaine manière, il est très déraisonnable d'exécuter chaque option manuellement avec la visualisation.

aide plz)) comment pouvez-vous résoudre le problème avec l'optimisation et le modèle ?

 
evillive:

Score ))))


Mais je n'ai pas écrit en MQL, mais formellement, c'est le problème ( :

Et comment le déterminer ?

Comme le nombre de valeurs est très limité, nous pouvons le vérifier par une force brute directe :

#property strict

/******************************************************************************/
void fun1(int const A) {
  Print("fun1()");

  if (A == 0 || A == 1) {
    Print("fun1 do!");
  }
}

/******************************************************************************/
void fun2(int const A) {
  Print("fun2()");

  if (A != 2) {
    Print("fun2 do!");
  }
}

/******************************************************************************/
void Гарантия_0_1_2(int const A) {
  switch (A) {
  case 0:
  case 1:
  case 2:
    fun1(A);
    fun2(A);
    break;
  default:
    Print("Не соблюдены условия (теоремы)");
  }
}

/******************************************************************************/
void OnStart() {
  for (int A = 0, limit = 4; A < limit; A++) {
    Print("Проверяем для A = ", A);
    Гарантия_0_1_2(A);
  }
}

Ici, nous avons :

22:52:38 Script 3 EURUSDm,H1: loaded successfully
22:52:38 3 EURUSDm,H1: initialized
22:52:38 3 EURUSDm,H1: Проверяем для A = 0
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 1
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun1 do!
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: fun2 do!
22:52:38 3 EURUSDm,H1: Проверяем для A = 2
22:52:38 3 EURUSDm,H1: fun1()
22:52:38 3 EURUSDm,H1: fun2()
22:52:38 3 EURUSDm,H1: Проверяем для A = 3
22:52:38 3 EURUSDm,H1: Не соблюдены условия (теоремы)
22:52:38 3 EURUSDm,H1: uninit reason 0
22:52:38 Script 3 EURUSDm,H1: removed

Il s'avère qu'ils sont égaux. S'il n'y avait pas 3 mais, disons, 3 millions de valeurs, il serait toujours possible d'effectuer un contrôle machine - renvoyer les résultats des fonctions et les comparer. Si aucune différence n'est trouvée pour l'ensemble de la gamme, alors ils sont égaux.

Si une expression est utilisée à la place d'une variable, par exemple un appel de fonction, alors l'équivalence devient "équivalence avec réserves" en raison du circuit court de calcul des expressions logiques.

 

Bonjour à tous !

Créer un indicateur basé sur un autre indicateur.

Le premier tampon compte comme il se doit.

La seconde ne le fait pas : je veux qu'elle commence à compter sur chaque barre après "line1 > 0".

C'est en gros ce que j'ai fait dans mon conseiller expert :

if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара

Et après "shift >= shet", la condition de dessin est déclenchée.

Je change les paramètres externes de la variable "shet", il n'y a pas de changement dans l'indicateur.

Quel peut être le problème ?

Code indicateur :

#property indicator_buffers 2
#property indicator_color1 Lime 
#property indicator_color2 Red
//--- input parameters
extern int       Period_MA_r=14;
extern int       r2          =7;
extern int       Period_MA_1=46;
extern int       p2          =19;
extern int       shet=7;
extern int       s        =0;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,119);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,shift;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for(i=limit1;i>=0;i--) 
   {
   line1=0;
   signal_line=0;
   line1=iCustom(NULL,0,"indikator1",Period_MA_r,r2,1,i+0);
   signal_line=iCustom(NULL,0,"indikator2",Period_MA_1,p2,0,i+0);
   
   if (line1 > 0 && time ==0){time=Time[i+0];}//сработало предварительное условие входа, записываем время
   if (time > 0)shift=iBarShift(Symbol(),Period(),i+time);//находим индекс бара
   if (line1 == 0){time=0;}//если индикатор равен нолю, то время сбрасывается на ноль
   if (line1 > 0 && signal_line < s){ExtMapBuffer1[i]=Low[i]-95*Point;}
   if (line1 > 0 && shift >= shet && signal_line < s){ExtMapBuffer2[i]=High[i]+95*Point;}
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
Forexman77:

Bonjour à tous !

Créer un indicateur basé sur un autre indicateur.

Le premier tampon compte comme il se doit.

La seconde ne le fait pas : je veux qu'elle commence à compter sur chaque barre après "line1 > 0".

C'est en gros ce que j'ai fait dans mon conseiller expert :

Et après "shift >= shet", la condition de dessin est déclenchée.

Je change les paramètres externes de la variable "shet", il n'y a pas de changement dans l'indicateur.

Quel peut être le problème ?

Code indicateur :


Il y a une certaine confusion au sujet de l'ajout de 0, mais essayez de cette façon :

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int counted_bars=IndicatorCounted(),
   i,limit1,shift = 0;
   limit1=Bars-counted_bars-1;
   double line1,signal_line;
   static datetime time;
   for (i=limit1;i>=0;i--) 
   {
       line1=0.;
       signal_line=0.;
       line1 = iCustom (_Symbol, _Period,"indikator1",Period_MA_r,r2,1, i+0);       // Не понятно - зачем прибавлять 0 ???
       signal_line = iCustom (_Symbol, _Period,"indikator2",Period_MA_1,p2,0,i+0);  // Не понятно - зачем прибавлять 0 ???
   
       if (line1 > 0. && time == 0) {time = Time[i+0];}                   //сработало предварительное условие входа, записываем время [тоже + 0]
       if (time > 0.) shift= i + iBarShift (_Symbol, _Period, time);      //находим индекс бара
       if (line1 == 0.) {time = 0;}                                       //если индикатор равен нолю, то время сбрасывается на ноль
       if (line1 > 0.)
       {
           if (signal_line < s)
           {
               ExtMapBuffer1[i] = Low[i] - 95.*Point;
               if (shift >= shet) {ExtMapBuffer2[i] = High[i]+95.*Point;}
           }
       }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

Bon après-midi.

Dans le terminal, si je double-clique sur la ligne de commande, une fenêtre de modification s'ouvre.

Mais si le prix d'ouverture d'un ordre et le take profit d'un autre ordre sont sur la même ligne, le dernier ordre modifié s'ouvre.

S'il vous plaît, indiquez si mql4 a une fonction pour ouvrir la fenêtre de modification de l'ordre en cliquant sur l'ordre nécessaire dans l'indicateur ?