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

 
Порт-моне тв:

@MakarFX, merci..... J'obtiens ces erreurs lors de la compilation

CounterOrderTradeType' - fonction non définie test for many expt trade.mq4 48 19

CounterOrderTradeType' - les déclarations de fonctions ne sont autorisées qu'au niveau global, de l'espace de noms ou de la classe test for many expt trade.mq4 141 5


corriger le surlignage jaune


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

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0; 

int OrderOfSymbol;
//+------------------------------------------------------------------+
....
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
  OrderOfSymbol=CounterOrderTradeType(-1);

...

//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
MakarFX:

Corrigez ce que vous avez souligné en jaune.


J'ai compris qu'il s'agissait de ces segments et j'ai essayé de redéfinir les variables, sans succès. Je suis dans mql4 (je ne suis pas familier avec 5, s'il y a une différence), donc je demande encore de l'aide
 
Порт-моне тв:
J'ai compris qu'il s'agissait de ces segments et j'ai essayé de redéfinir les variables, sans succès. Je suis en mql4 (je ne connais pas la mql5, s'il y a une différence), alors aidez-moi encore.
Donnez-moi le code que vous avez, je verrai ce qui ne va pas.
 
MakarFX:
Donnez-moi le code que vous avez, je verrai ce qui ne va pas.
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte

extern int Magic = 6477 ;
extern double Lot = 0.01 ;
extern int Slippage = 3 ;
extern int TakeProfit = 1600 ;
extern int StopLoss = 800 ;
extern int Experation = 0 ;

double Openone, //prix d'ouverture de la première bougie
Opentwo, //prix d'ouverture de la deuxième bougie
Closeone, //prix de clôture de la première bougie
Closetwo, //la scène de la deuxième bougie
Lowone, //prix minimum de la première bougie
Lowtwo, //prix de la première bougie
Lowthree, //la scène du minimum de la troisième bougie
Openthree, //prix d'ouverture d'une troisième bougie
Closethree, //prix de clôture de la troisième bougie
CloseOrder, //clôturer l'ordre
Highone, /prix maximum de la première bougie
Hightwo, //le prix maximum de la deuxième bougie
Highhree, //le prix maximum de la deuxième bougie
Highfour, //le prix est le maximum de la deuxième bougie
Highfive, //prix d'un maximum d'une deuxième bougie
Highsix, //prix du maximum de la deuxième bougie.
Highseven, //prix du maximum de la deuxième bougie
Highheight, //prix d'un maximum d'une deuxième bougie
Lowfour, //le prix du minimum de la quatrième bougie
Lowfive, //premier prix d'une cinquième bougie
Lowsix, //la scène du minimum d'une sixième bougie
Lowseven, //la scène d'un minimum d'une septième bougie
Loweight, //la scène du minimum de la huitième bougie
Closefour, //le prix de clôture de la quatrième bougie
Openfour,
Low15,
Low25,
SLbuy, TPbuy, SLsell, TPsell, //prix d'ouverture de la quatrième bougie
OrderOpenPrice ;
int ticket, ticketclose ;
int OrderOfSymbol ;

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED) ;
}
//+------------------------------------------------------------------+
//| Fonction de désinitialisation experte |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| fonction tick expert |
//+------------------------------------------------------------------+
void OnTick()
{
OrderOfSymbol=CounterOrderTradeType(-1) ;
//--- déterminer les prix des barres nécessaires
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits) ;
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits) ;
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits) ;
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits) ;
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits) ;
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits) ;
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits) ;
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits) ;
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits) ;
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits) ;
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits) ;
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits) ;
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits) ;
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits) ;
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits) ;
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits) ;
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits) ;
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits) ;
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits) ;
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits) ;
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits) ;
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits) ;
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits) ;
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits) ;
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits) ;

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1) ;
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1) ;
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1) ;
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1) ;
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1) ;
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0) ;
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0) ;
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0) ;

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5) ;
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5) ;
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5) ;
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5) ;


//-------------функции---------------------------------------




si ( Ask>0 && Bid >0)
{

si (OrdersTotal()<1)
si (Close[1]>Open[1])
if(Ask>LowerBB)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
si(OrdersTotal()==1)
if(Bid>UpperBB)
CloseBuyPositions1() ;
}

//+------------------------------------------------------------------+
//| Comptage des commandes |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE type_d'ordre)
{
int cnt=0 ;
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
si(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continuer ;
si(OrderSymbol()!=_Symbol) continuer ;
if(order_type == OrderType() || order_type == -1) cnt++ ;
}
//----
retour(cnt) ;
}


//---- fin de la fonction
}
//---------------------------------------------------------------------
void CloseBuyPositions1()
{
for(int i = OrdersTotal() - 1 ; i >= 0 ; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
si(OrderMagicNumber() == Magique)
si(OrderSymbol() == Symbol())
{


si(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL) ;
}
}
}




Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
 
Порт-моне тв:

la mauvaise parenthèse ...attrape.

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

extern int Magic = 64777;
extern double Lot = 0.01;
extern int Slippage = 3;
extern int TakeProfit = 1600;
extern int StopLoss = 800;
extern int Experation = 0;

double Openone,    //цена открытия первой свечи
Opentwo,    //цена открытия второй свечи
Closeone,   //цена закрытия первой свечи
Closetwo,   //цена закрытия второй свечи
Lowone,     //цена минимальная первой свечи
Lowtwo,     //цена минимальная второй свечи
Lowthree,   //цена минимальная третьей свечи
Openthree,  //цена открытия третьей свечи
Closethree, //цена закрытия третьей свечи
CloseOrder, //закрыть ордер
Highone,    //цена максимальная первой свечи
Hightwo,    //цена максимальная второй свечи
Highthree,    //цена максимальная второй свечи
Highfour,    //цена максимальная второй свечи
Highfive,    //цена максимальная второй свечи
Highsix,    //цена максимальная второй свечи
Highseven,    //цена максимальная второй свечи
Higheight,    //цена максимальная второй свечи
Lowfour,    //цена минимальная четвертой свечи
Lowfive,    //цена минимальная пятой свечи
Lowsix,    //цена минимальная шестой свечи
Lowseven,    //цена минимальная седьмой свечи
Loweight,    //цена минимальная восьмой свечи
Closefour,  //цена закрытия четвертой свечи
Openfour,
Low15,
Low25, 
SLbuy, TPbuy,  SLsell, TPsell,   //цена открытия четвертой свечи
OrderOpenPrice;
int ticket, ticketclose; 
int OrderOfSymbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  OrderOfSymbol=CounterOrderTradeType(-1); 
//--- определение цен необходимых баров
   Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits);
   Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits);
   Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits);
   Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits);
   Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits);
   Highfive  = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits);
   Highsix  = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits);
   Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits);
   Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits);
   Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits);
   Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits);
   Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits);
   Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits);
   Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits);
   Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits);
   Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits);
   Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits);
   Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits);
   Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits);
   Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits);
   Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits);
   Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits);
   Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits);
   Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits);
   Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits);

     
//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1);
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1);
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1);
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1);
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1);
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0);
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0);

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5); 
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5);
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5); 
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5);


//-------------функции---------------------------------------
            
if ( Ask>0 && Bid >0)
   {

 if (OrdersTotal()<1)
    if (Close[1]>Open[1])
    if(Ask>LowerBB)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrdersTotal()==1)
   if(Bid>UpperBB)
    CloseBuyPositions1();
   }
}
//----конец функции
//---------------------------------------------------------------------
void CloseBuyPositions1()
      {
      
       for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol())
              {


          
          if(OrderType()==OP_BUY)
             {
              if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}
             }
          }
       } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }   
       
 
Порт-моне тв:

C'est ce que je ne comprends pas.

if ( Ask>0 && Bid >0)

Pourquoi ?

 
MakarFX:

C'est ce que je ne comprends pas.

Pourquoi ?

Je fais cela pour ne pas avoir à écrire des fonctions supplémentaires avec toutes les parenthèses, puis à expérimenter avec les indicateurs de cette fonction en changeant cette valeur courante.
 
Порт-моне тв:
pour éviter d'avoir à écrire des fonctions supplémentaires avec toutes les parenthèses, j'en ajoute également une générale, puis j'expérimente les indicateurs sur cette fonction

Je ferais ça

//-------------функции---------------------------------------
            
 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
      if(Ask>LowerBB)
         {
         if(OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue)){Print("Buy Order Open");}
         }
         
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol)
            if(Bid>UpperBB)
               CloseBuyPositions1();
   }
//----конец функции
 
MakarFX:

Мне вот это не понятно

зачем?


Le problème n'est pas résolu, a ouvert l'ordre sur un graphique, sur le second ne veut pas, compte OrdersTotal apparemment à nouveau sur tous (si quelque chose le magicien a changé, même compilé un EA séparé)

 
Порт-моне тв:

Le problème n'est pas résolu, a ouvert l'ordre sur un graphique, sur le second ne veut pas, compte OrdersTotal apparemment à nouveau sur tous (si quelque chose le magicien a changé, même compilé un EA séparé)

Mettez la fonction de mon poste. Cela fonctionne pour moi