新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1309

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

@MakarFX,谢谢你....我在编译时得到这些错误

'CounterOrderTradeType' - 函数未定义 测试许多expt trade.mq4 48 19

'CounterOrderTradeType' - 只允许在全局、命名空间或类范围内进行函数声明 测试许多expt trade.mq4 141 5


纠正黄色突出部分


 //+------------------------------------------------------------------+
//|                                                   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:

纠正你用黄色标注的内容。


我意识到这是关于这些段的问题,并试图重新定义变量,但没有帮助。我在mql4(我不熟悉5,如果有区别的话),所以我再次请求帮助
 
Порт-моне тв:
我意识到这是关于这些段的问题,并试图重新定义变量,但没有帮助。我在mql4(我不熟悉mql5,如果它不同的话),所以请再次帮助我。
把你的代码给我,我看看有什么问题。
 
MakarFX:
把你的代码给我,我看看有什么问题。
//+------------------------------------------------------------------+
//| sova_2bars.mq4 | |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#属性链接 "https://www.mql5.com"
#财产版本 "1.00"
#属性严格

外置 int Magic = 6477;
外来的双数Lot = 0.01。
外置 int Slippage = 3;
外来的int TakeProfit = 1600;
外来的int StopLoss = 800;
extern int Experation = 0;

double Openone, //第一支蜡烛的开盘价。
Opentwo, //第二支蜡烛的开盘价
Closeone, //第一支蜡烛的收盘价
Closetwo, //第二支蜡烛的场景
Lowone, //第一支蜡烛的最低价格
Lowtwo, //第一支蜡烛的价格
Lowthree, //第三支蜡烛的最低点现场
Openthree, //第三根蜡烛的开盘价
Closethree, //第三根蜡烛的收盘价
CloseOrder, //关闭订单
Highone, //第一支蜡烛的最高价格
Hightwo, //第二支蜡烛的价格最大值
Highhree, //第二支蜡烛的价格最大值
Highfour, //价格是第二支蜡烛的最大值
Highfive, //最大的第二支蜡烛的价格
Highsix, //最大第二根蜡烛的价格。
Highseven, //最大第二根蜡烛的价格
Highheight, //最大第二根蜡烛的价格
Lowfour, //第四支蜡烛的最低价格
Lowfive, //第五支蜡烛的第一个价格
Lowsix, //第六支蜡烛的最小场景
Lowseven, //最低限度的第七支蜡烛的场景
Loweight, //第八根蜡烛的最低点现场
Closefour, //第四支蜡烛的收盘价。
敞开的四分之一。
低15。
低25。
SLbuy, TPbuy, SLsell, TPsell, //第四支蜡烛的开盘价
订单开价。
int ticket, ticketclose;
int OrderOfSymbol;

//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的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);


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




如果 ( Ask>0 && Bid >0)
{

如果(OrdersTotal()<1)
如果(Close[1]>Open[1])。
如果(Ask>LowerBB)
{
ticket = OrderSend(Symbol(,OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "openbuy order", Magic, 0, Blue)
}
如果(OrdersTotal()==1)
如果(Bid>UpperBB)
CloseBuyPositions1()。
}

//+------------------------------------------------------------------+
//| 顺序计数|
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
{
int cnt=0。
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
如果(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) 继续。
如果(OrderSymbol()!=_Symbol)继续。
如果(order_type == OrderType() || order_type == -1) cnt++;
}
//----
return(cnt)。
}


//---- 函数结束
}
//---------------------------------------------------------------------
空白的CloseBuyPositions1()。
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
如果(OrderMagicNumber() == Magic)
如果(OrderSymbol() == Symbol())
{


如果(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: ...
 
Порт-моне тв:

错了括号......接住。

 //+------------------------------------------------------------------+
//|                                                   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);
   }   
       
 
Порт-моне тв:

这就是我不明白的地方。

if ( Ask>0 && Bid >0)

为什么?

 
MakarFX:

这就是我不明白的地方。

为什么?

我这样做是为了不必用所有的括号编写额外的函数,然后通过改变这个常识性的值来实验这个函数上的指标
 
Порт-моне тв:
我这样做是为了不必用所有的括号写额外的函数,然后我在这个函数上实验了一下指标

我想这样做

//-------------функции---------------------------------------
            
 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:

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

зачем?


问题没有解决,在一个图表上开了订单,在第二个图表上却不愿意,显然又在所有的图表上计算OrdersTotal(如果魔术师改变了什么,甚至编制了一个单独的EA)。

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

问题没有解决,在一个图表上开了订单,在第二个图表上却不愿意,显然又在所有的图表上计算OrdersTotal(如果魔术师改变了什么,甚至编制了一个单独的EA)。

把我帖子里的功能。这对我来说是有效的
原因: