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.MACDが0より上に開いた-4本中1本の確認は: 3番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーが0を超えてオープン- 4確認のうち3 はい;
    4。 4番目のろうそくの始値 - (5)以上(75)と(85)+ MACDバーは0を超えてオープン- 4確認のうち4はい- 同じキャンドルで購入するオープントレード(4日)。

売り 注文と同じ状況で、唯一の他の方向で指標を開く必要があります。そして、重要なポイントがあります -例えば、4日に1番目のろうそくの任意の段階で 指標は、その位置を 変更 する場合(例えば、3番目のオープニングキャンドルで、MACDバーは0以下のいずれか、または= 0)を開き -信号が連続して4番目のろうそくのオープニングでチェックされていないため、次に、すべてがリセット されます。

経験豊富なプログラマーの方、これらの条件を動作させるには、コードのどこを変更する必要があるか、アドバイスお願いします。いろいろ試したけど、よくわからない......。

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

諺にもあるように、私たちの言葉を鵜呑みにしないでください。

OrderSell

何が入っているかは分からないが、判断のロジックをコードで共有する。

 

artem artem #:

第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本目)で買いのオープントレードを 行う。

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

    ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。

     
    Volodymyr Zubov #:

    ある価値観を別の価値観で採点すると、何もない?最初のブロック=解答、2番目のブロック=解答と分割し、ブロックを比較します。

    これは誰に向けて書かれたものなのか、あるいは何に向けて書かれたものなのか。
     
    コードに
    malw
    、そこでロジカルエラーが出ることが判明しました。
     
    Volodymyr Zubov #:
    コードの中に論理的な間違いがあることがわかりました。
    書く前に確認すること
     

    しかし、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなります

     
    Volodymyr Zubov #:

    OKですが、そのような使い方をすると変数がクラッシュしてしまい、何が「奇跡」なのかわからなくなってしまいます。

    他の選択肢を知っているのなら、それを書いてください...。

    人を助けることができる)