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

 

对于一个测试人员来说,这

OrderSend

可以,甚至可以在快速服务器上工作,但如果不是测试人员,最好根据文档来做 :)

 
伙计们,我需要帮助,我已经好几天没能对以下代码进行必要的修改了。
void start()
{
   StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); 
   
   // Определение направления пересечения мувингов
   if (Init) InitMetod(); 
   
   // Трейлинг стоп открытых позиций
   if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
   
   // Ожидание нового бара на графике
   if(timeprev == Time[0]) return;
   timeprev = Time[0];
   
   // Открытие ордера по методу Пуриа
   CheckForOpen();
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen() // Открытие ордера по методу Пуриа
{
   double malw,mas1,mas2,macd;
   int    res;  
   // Считывание параметров индикаторов
   malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
   mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
   mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
   macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
  
   // Проверяем положение мувмнгов
   if(malw>mas1 && malw>mas2  && OrderSell)
     {
     OrderBuy=true;
     OrderSell=false;
     Order=true;
     }
   
   if(malw<mas1 && malw<mas2  && OrderBuy)
     {
     OrderBuy=false;
     OrderSell=true;
     Order=true;
     }

   // Открываем ордер Buy
   if(macd>0 && OrderBuy && Order)
     {
     res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
     Order=false;
     return;
     }     
   // Открываем ордер Sell   
   if(macd<0 && OrderSell && Order)
     {
     res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
     Order=false;
     return;
     }
 
}  
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lots()  // Расчет объема лота
{
   double Lots;
   if (Lot > 0) return(Lot);
   Lots=AccountFreeMargin()/5000;
   Lots=MathMin(15,MathMax(0.01,Lots));
   if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
   else 
     {
     if(Lots<1) Lots=NormalizeDouble(Lots,1);
     else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
}
//+------------------------------------------------------------------+
//| Init metod Puria function                                        |
//+------------------------------------------------------------------+
void InitMetod()  // Опредеоение начального пересечения мувингов
{
   double malw,mas1,mas2;
   malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
   mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
   mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);

   if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
     {
     Init=false;
     OrderBuy=true;
     OrderSell=true;
     }   
   return;
}

实际上,我尝试过但无法在此补充的是:让EA 在所有指标(蜡烛开盘价)重合后连续等待4个蜡烛开盘价


  1. 1.第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4次确认中的1次是
    2.第2根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4次确认中的2次是
    3。第3根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是;
    4.第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4次确认中 的4次-- 在同一根蜡烛(第4次)上打开交易买入

卖出 订单 情况也一样,只是在另一个方向的指标应该打开。有一点很重要--如果在第1根蜡烛到第4根蜡烛的任何阶段 指标改变了它们的位置(例如,在第3根开盘的蜡烛上,MACD柱打开时低于0,或者=0)--那么一切都会重置,因为在连续第4根蜡烛的开盘时没有检查信号。

有经验的程序员,请指点一下,在代码中需要改变什么才能使这些条件发挥作用?我已经尝试了很多东西,我不知道...

 
   if(malw>mas1 && malw>mas2  && OrderSell)

正如他们所说,不要相信我们的话。

OrderSell

不知道里面可能有什么,分享代码中的决策逻辑。

 

artem artem #:

第1根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上--4个确认中的1个是

2 第二根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱子开在0以上-- 4个 确认中的2个 是。

3 第三根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4 次确认中的3次 是。

4 第4根蜡烛的开盘价--(5)超过(75)和(85)+MACD柱在0以上开盘-- 4个中的4 个确认-- 在同一根蜡烛(第4根)上打开交易买入

    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
       if(CheckForOpen()==0)
         {
          if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK");
         }
       if(CheckForOpen()==1)
         {
          if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK");
         }
      }
    //+------------------------------------------------------------------+
    //| Check for open order conditions                                  |
    //+------------------------------------------------------------------+
    int CheckForOpen() // Открытие ордера по методу Пуриа
      {
       double malw,mas1,mas2,macd;
       int    res=-1, buy=0, sell=0;
       // Считывание параметров индикаторов 3 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 2 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 1 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 0 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       
       if(buy ==4) res=0;
       if(sell==4) res=1;
       return(res);
      }
     
    malw

    用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。

     
    Volodymyr Zubov #:

    用一种价值来衡量另一种价值,没有什么?分割第一块=解决方案,第二块=解决方案,比较块。

    这是写给谁的?或写给什么?
     
    事实证明,你的代码里有
    malw
    ,那里出现了一个逻辑错误。
     
    Volodymyr Zubov #:
    事实证明,在代码中,你有一个逻辑错误。
    写作前检查
     

    好吧,但如果你这样使用,变量会崩溃,然后你就不知道什么是 "奇迹 "了

     
    Volodymyr Zubov #:

    好吧,但如果你这样使用,变量会崩溃,然后你就不知道 "奇迹 "是什么了。

    如果你知道其他选择,请写下来...

    你可以帮助别人)。

    原因: