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

 
Qui d'autre peut aider ?)
 
Rustam Bikbulatov:
Qui d'autre peut aider ?)

Vous semblez avoir reçu des réponses et des exemples complets, mais vous devez encore lire l'aide pour comprendre comment les fonctions sont appelées et pourquoi le modificateur statique est utilisé.

Voici une autre façon de faire, qui sera peut-être plus facile à comprendre pour vous :

int N(bool reset=false) // если вызываем N() то возвращает следующее значение n++, при первом вызове n=0, но вернет 1, т.к. n=0, а затем n++, если нужно 0 то 
			// или  static int n=-1; или вызывайте сначала N(true)
  {                     // если вызываем N(true), то сбрасываем n=0 и возвращзаем 0
   static int n=0;
   if(reset) n=0; else n++;
   return n;
  }
 
Igor Makanu:

Vous semblez avoir reçu des réponses et des exemples complets, mais vous devez encore lire l'aide pour comprendre comment les fonctions sont appelées et pourquoi le modificateur statique est utilisé.

Voici une autre variante, qui vous permettra peut-être de mieux comprendre :

Le premier exemple montre un appel de fonction lorsqu'aucune position n'est prise et que le résultat renvoyé est comparé.

if( ((OpenB-Ask)/ma+TimeB/60) > N() )

C'est pourquoi il vaut probablement la peine de ne faire que le retour sans mettre à zéro et ajouter. que j'ai mis en œuvre dans 2 variantes

 
//+------------------------------------------------------------------+
//|                                                 elliotbutton.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  ButtonCreate();
  ButtonCreate(0,"ButtonMinor",0,10,60,50,50,CORNER_LEFT_UPPER,"(i)","Arial",12,clrBlack, C'236,233,216',clrNONE,false,false,false,false,0);
  
  
     return(INIT_SUCCEEDED);
  }

void OnTick()
  {
  }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
         if (ObjectGetInteger(0,"Button",OBJPROP_STATE,0)==true) 
          {
               int      x     =(int)lparam;
               int      y     =(int)dparam;
               datetime dt    =0;
               double   price =0;
               int      window=0;
                        if(ChartXYToTimePrice(0,x,y,window,dt,price))  
                         {
                         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);
                                 if(ChartTimePriceToXY(0,window,dt,price,x,y))
                                     PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
                                 ChartRedraw(0);
                         }
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"i","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
            
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"ii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
          
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iii","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
           
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"iv","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
             
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"v","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
               
               ObjectSetInteger(0,"Button",OBJPROP_STATE,False);
             }
                        
               
          if (ObjectGetInteger(0,"ButtonMinor",OBJPROP_STATE,0)==true) 
          {
               int      x     =(int)lparam;
               int      y     =(int)dparam;
               datetime dt    =0;
               double   price =0;
               int      window=0;
                        if(ChartXYToTimePrice(0,x,y,window,dt,price))  
                         {
                         PrintFormat("Window=%d X=%d  Y=%d  =>  Time=%s  Price=%G",window,x,y,TimeToString(dt),price);
                                 if(ChartTimePriceToXY(0,window,dt,price,x,y))
                                     PrintFormat("Time=%s  Price=%G  =>  X=%d  Y=%d",TimeToString(dt),price,x,y);
                                 ChartRedraw(0);
                         }
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(i)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
            
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(ii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
          
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iii)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0);
           
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(iv)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
             
               TextCreate(0,"Text "+string(MathRand()),0,dt,price,"(v)","Arial",10,clrBlack,0.0,ANCHOR_LEFT_UPPER,false,true,false,0); 
               
               ObjectSetInteger(0,"ButtonMinor",OBJPROP_STATE,False);
               
            
           }
 }
            
  
  

void OnDeinit(const int reason)
  {
   ObjectDelete(0,"Button");
   ObjectDelete(0,"ButtonMinor");
  }
  
bool ButtonCreate(const long              chart_ID=0,               // ID графика 
                  const string            name="Button",            // имя кнопки 
                  const int               sub_window=0,             // номер подокна 
                  const int               x=10,                      // координата по оси X 
                  const int               y=10,                      // координата по оси Y 
                  const int               width=50,                 // ширина кнопки 
                  const int               height=50,                // высота кнопки 
                  const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки 
                  const string            text="i",                 // текст 
                  const string            font="Arial",             // шрифт 
                  const int               font_size=10,             // размер шрифта 
                  const color             clr=clrBlack,             // цвет текста 
                  const color             back_clr=C'236,233,216',  // цвет фона 
                  const color             border_clr=clrNONE,       // цвет границы 
                  const bool              state=false,              // нажата/отжата 
                  const bool              back=false,               // на заднем плане 
                  const bool              selection=false,          // выделить для перемещений 
                  const bool              hidden=false,              // скрыт в списке объектов 
                  const long              z_order=0)                // приоритет на нажатие мышью 
  { 

   ResetLastError(); 

   if(ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); 
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); 
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); 
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
      }
  return(true); 
 }
 
 bool TextCreate(const long              chart_ID=0,              // ID графика 
                const string            name="Text",              // имя объекта 
                const int               sub_window=0,             // номер подокна 
                datetime                time=0,                   // время точки привязки 
                double                  price=0,                  // цена точки привязки 
                const string            text="Text",              // сам текст 
                const string            font="Arial",             // шрифт 
                const int               font_size=10,             // размер шрифта 
                const color             clr=clrBlack,             // цвет 
                const double            angle=0.0,                // наклон текста 
                const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                const bool              back=false,               // на заднем плане 
                const bool              selection=true,           // выделить для перемещений 
                const bool              hidden=true,              // скрыт в списке объектов 
                const long              z_order=0)                // приоритет на нажатие мышью 
  { 

   ResetLastError(); 

   if(ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
     { 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); 
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font); 
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
     }
   return(true); 
 } 



  
  

écrire un EA qui, lorsque je clique sur le bouton, crée un texte à l'endroit du graphique indiqué par la souris. Maintenant, mon conseiller expert crée uniquement du texte à la place du bouton.

 

Bonjour, comment faire en sorte que lorsque je glisse et dépose manuellement un ordre d'achat en attente, l'autre ordre de vente en attente se déplace avec lui ?

Comment puis-je lier l'un à l'autre, de sorte que lorsque je déplace l'un d'eux, les deux se déplacent en même temps ?

 


Здравствуйте. У меня алгоритм такой 
//----------------------------------------------------------------------------
if (CountBuy() == 0)
{

BuySignal = h1; tttp=1; 
if (BuySignal > 0 && tttp==1 && h2>0)
{
CloseSell();
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);

if (ticket > 0)
{

if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{

SL = NormalizeDouble(Ask-StopLoss*Point, Digits);

TP = NormalizeDouble(Ask+TakeProfit*Point, Digits);

res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)

Print("Ошибка модификации ордера на покупку, ASK=" + DoubleToStr(Ask) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
if (CountSell() == 0)
{
SellSignal= l1; tttp=-1;
if (SellSignal > 0 && tttp==-1 && l2>0)
{
CloseBuy();
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
SL = NormalizeDouble(Bid+StopLoss*Point, Digits);
TP = NormalizeDouble(Bid-TakeProfit*Point, Digits);
res = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0);
if (!res)
Print("Ошибка модификации ордера на продажу, BID=" + DoubleToStr(Bid) + ", SL=" + DoubleToStr(SL) + ", TP=" + DoubleToStr(TP)); 
}
}
}
}
} 
//------------------------------------------------------------------------------------------
Пытаюсь сделать, чтоб условия на открытие ордера проверялось бы через какое-то кол-во баров, а так сразу открывается другой ордер
 
Carcass77:

Pourquoi le spam ?

 
Konstantin Nikitin:

Pourquoi le spam ?

Ce que vous avez écrit dans plusieurs fils de discussion ? Je peux l'enlever.
 
Ihor Herasko:

Rédigez vos propres tics et mettez-les dans le testeur de stratégie.

Salutations. Pouvez-vous me dire quel est le problème et comment le résoudre ?

J'ai modifié certains chandeliers de l'historique pour les tester, pour les 1er, 2ème, 3ème et 6ème.

Lors du test, le deuxième est traité, le troisième est dessiné (sans traitement), et s'arrête en donnant une erreur arrêtée à cause de Stop Out



 

Bon après-midi

J'ai une situation très simple mais j'ai du mal à la résoudre.

Dites-moi ce que je fais de mal :

problème : je ne peux pas lier un indicateur personnalisé(i-DRP...) à un Expert Advisor (DR Test) via iCustom.

merci d'avance

Dossiers :
Raison: