BバンドとB幅に基づいたEAを作りたいのですが、緊急のヘルプが必要です! - ページ 2

 
surubabs:

スペルミスがあり申し訳ありません。

帯域幅を求めたいのですが、そのためには以下のような計算が必要です。

幅=(上バンド-下バンド)/ベースバンド

この計算をEA内部で行うことは可能ですか?

どのようにこれを定義するのですか? 試したところ、エラーが出ました。

Width[]=(Upperband[]-Lowerband[])/Baseband[]と表示されました。

アドバイスお願いします。

何をしようとしているのか、実際のコードを示してください。
 
angevoyageur:
あなたが試みていることの実際のコードを見せてください。
私はまだそれに取り組んでいます、あなたが私の投稿をリプレイするとき、私はそれに取り組んでいるものを投稿します。
//+------------------------------------------------------------------+
//|                                            Bolinger_Width_EA.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

//--- input parameters
input int bands_period= 20;        // Bollinger Bands period
input int bands_shift = 0;         // Bollinger Bands shift
input double deviation= 2;         // Standard deviation
input double   Lot=1;            // Lots to trade
input ENUM_APPLIED_PRICE  applied_price=PRICE_CLOSE; //type of price or handle
//--- global variables
int BolBandsHandle;                // Bolinger Bands handle
double iBBUp[],iBBLow[],iBBMidle[];   // dynamic arrays for numerical values of Bollinger Bands
double width;
double            inputs[];        // array for storing inputs
double            weight[20];        // array for storing weights
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  
//--- Do we have sufficient bars to work
   if(Bars(_Symbol,_Period)<60) // total number of bars is less than 60?
     {
      Alert("We have less than 60 bars on the chart, an Expert Advisor terminated!!");
      return(-1);
     }
//--- get handle of the Bollinger Bands and Width indicators
   BolBandsHandle=iBands(NULL,PERIOD_M1,bands_period,bands_shift,deviation,PRICE_CLOSE);
//--- Check for Invalid Handle
   if(BolBandsHandle<0)
     {
      Alert("Error in creation of indicators - error: ",GetLastError(),"!!");
      return(-1);
     }

   return(0);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- release indicator handles
   IndicatorRelease(BolBandsHandle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- we will use the static Old_Time variable to serve the bar time.
//--- at each OnTick execution we will check the current bar time with the saved one.
//--- if the bar time isn't equal to the saved time, it indicates that we have a new tick.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

//--- copying the last bar time to the element New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, the data has been copied successfully
     {
      if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
        {
         IsNewBar=true;   // if it isn't a first call, the new bar has appeared
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
         Old_Time=New_Time[0];            // saving bar time
        }
     }
   else
     {
      Alert("Error in copying historical times data, error =",GetLastError());
      ResetLastError();
      return;
     }

//--- EA should only check for new trade if we have a new bar
   if(IsNewBar==false)
     {
      return;
     }

//--- do we have enough bars to work with
   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) // if total bars is less than 60 bars
     {
      Alert("We have less than 60 bars, EA will now exit!!");
      return;
     }

   MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar   

/*
     Let's make sure our arrays values for the Rates and Indicators 
     is stored serially similar to the timeseries array
*/

// the rates arrays
   ArraySetAsSeries(mrate,true);
// the indicator arrays
   ArraySetAsSeries(iBBUp,true);
   ArraySetAsSeries(iBBLow,true);
   ArraySetAsSeries(iBBMidle,true);

//--- Get the details of the latest 3 bars
   if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Alert("Error copying rates/history data - error:",GetLastError(),"!!");
      return;
     }
   int err1=0;
   
   err1=CopyBuffer(BolBandsHandle,0,0,3,iBBMidle) || CopyBuffer(BolBandsHandle,1,0,3,iBBUp)
      || CopyBuffer(BolBandsHandle,2,0,3,iBBLow);
      if(err1<0 )
     {
      Print("Failed to copy data from the indicator buffer");
      return;

     }
   double d1=-1.0; //lower limit of the normalization range
   double d2=1.0;  //upper limit of the normalization range
      
      double x_min=MathMin(iBBMidle[ArrayMinimum(iBBMidle)],iBBUp[ArrayMinimum(iBBUp)],iBBLow[ArrayMinimum(iBBLow)]); //minimum value over the range
      double x_max=MathMax(iBBMidle[ArrayMaximum(iBBMidle)],iBBUp[ArrayMaximum(iBBUp)],iBBLow[ArrayMaximum(iBBLow)]); //minimum value ove
         
     for(int i=0;i<ArraySize(inputs);i++)
     {
      inputs[i]=(((((iBBUp[i]-iBBLow[i])/iBBMidle[i])-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
//--- store the neuron calculation result in the out variable
   out=(inputs,weight);
     
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);   // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);   // Bid price

//--- Declare bool type variables to hold our Buy and Sell Conditions
   bool Buy_Condition =(mrate[1].close > iBBUp[1] && mrate[1].open < iBBUp[1] &&  // White (bull) candle crossed the Lower Band from below to above
                        (iBBUp[0] - iBBLow[0])>(iBBUp[1] - iBBLow[1]) && (iBBUp[1] - iBBLow[1])>(iBBUp[2] - iBBLow[2])); // and Width is growing up

   bool Sell_Condition = (mrate[1].close < iBBLow[1] && mrate[1].open > iBBLow[1] &&  // Black (bear) candle crossed the Upper Band from above to below
                          (iBBUp[0] - iBBLow[0])>(iBBUp[1] - iBBLow[1]) && (iBBUp[1] - iBBLow[1])>(iBBUp[2] - iBBLow[2]));// and Width is falling down

   bool Buy_Close=(mrate[1].close<iBBMidle[1] && mrate[1].open>iBBMidle[1]);              // Black candle crossed the Upper Band from above to below

   bool Sell_Close=(mrate[1].close>iBBMidle[1] && mrate[1].open<iBBMidle[1]);           // White candle crossed the Lower Band from below to above

   if(Buy_Condition && !PositionSelect(_Symbol))    // Open long position
     {                                              // Width is growing up
      LongPositionOpen();                           // and white candle crossed the Lower Band from below to above
     }

   if(Sell_Condition && !PositionSelect(_Symbol))   // Open short position
     {                                              // Width is falling down
      ShortPositionOpen();                          // and Black candle crossed the Upper Band from above to below
     }

   if(Buy_Close && PositionSelect(_Symbol))         // Close long position
     {                                              // Black candle crossed the Upper Band from above to below
      LongPositionClose();
     }

   if(Sell_Close && PositionSelect(_Symbol))        // Close short position
     {                                              // White candle crossed the Lower Band from below to above
      ShortPositionClose();
     }

   return;
  }
//+------------------------------------------------------------------+
//| Open Long position                                               |
//+------------------------------------------------------------------+
void LongPositionOpen()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
   
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);    // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

   if(!PositionSelect(_Symbol))
     {
      mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
      mrequest.price = NormalizeDouble(Ask,_Digits);     // Lastest Ask price
      mrequest.sl = 0;                                   // Stop Loss
      mrequest.tp = 0;                                   // Take Profit
      mrequest.symbol = _Symbol;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0;                                // Magic Number
      mrequest.type = ORDER_TYPE_BUY;                    // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
      mrequest.deviation=5;                              // Deviation from current price
      OrderSend(mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Open Short position                                              |
//+------------------------------------------------------------------+
void ShortPositionOpen()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
   
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);    // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

   if(!PositionSelect(_Symbol))
     {
      mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
      mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
      mrequest.sl = 0;                                   // Stop Loss
      mrequest.tp = 0;                                   // Take Profit
      mrequest.symbol = _Symbol;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0;                                // Magic Number
      mrequest.type= ORDER_TYPE_SELL;                    // Sell order
      mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
      mrequest.deviation=5;                              // Deviation from current price
      OrderSend(mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Close Long position                                              |
//+------------------------------------------------------------------+
void LongPositionClose()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
   
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);    // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
      mrequest.price = NormalizeDouble(Bid,_Digits);     // Lastest Bid price
      mrequest.sl = 0;                                   // Stop Loss
      mrequest.tp = 0;                                   // Take Profit
      mrequest.symbol = _Symbol;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0;                                // Magic Number
      mrequest.type= ORDER_TYPE_SELL;                    // Sell order
      mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
      mrequest.deviation=5;                              // Deviation from current price
      OrderSend(mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
//| Close Short position                                             |
//+------------------------------------------------------------------+
void ShortPositionClose()
  {
   MqlTradeRequest mrequest;                             // Will be used for trade requests
   MqlTradeResult mresult;                               // Will be used for results of trade requests
   
   ZeroMemory(mrequest);
   ZeroMemory(mresult);
   
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);    // Ask price
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);    // Bid price

   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      mrequest.action = TRADE_ACTION_DEAL;               // Immediate order execution
      mrequest.price = NormalizeDouble(Ask,_Digits);     // Latest ask price
      mrequest.sl = 0;                                   // Stop Loss
      mrequest.tp = 0;                                   // Take Profit
      mrequest.symbol = _Symbol;                         // Symbol
      mrequest.volume = Lot;                             // Number of lots to trade
      mrequest.magic = 0;                                // Magic Number
      mrequest.type = ORDER_TYPE_BUY;                    // Buy order
      mrequest.type_filling = ORDER_FILLING_FOK;         // Order execution type
      mrequest.deviation=5;                              // Deviation from current price
      OrderSend(mrequest,mresult);                       // Send order
     }
  }
//+------------------------------------------------------------------+
 
surubabs:
私はまだそれに取り組んでいます、あなたが私の投稿をリプレイするとき、私はそれに取り組んでいるものを投稿します。
  • なぜドキュメントを読まなかったのですか?MathMaxと MathMinは2つの引数を取るだけです。
  • out=(inputs,weight); とは何ですか?
 
angevoyageur:
  • なぜドキュメントを読まなかったのですか?MathMaxと MathMinは2つの引数を取るだけです。
  • out=(inputs,weight); ってなんですか?

mathfunctionsのドキュメントを理解しようとしたのですが、正しいものが見つかりませんでした。

私は何時間も前から一つ一つ試しているのですが、正しい方法を教えてもらえますか?

 
surubabs:

mathfunctionsのDocsを理解しようとしたのですが、どれを使えばいいのかわからず、正しい方法を見つけられませんでした。

私は何時間もかけて一つ一つ試しているのですが、正しい方法を教えていただけませんか?

何をするための正しい方法ですか?
 

こんにちは。

MathMax関数は2つの 値の最大値を返します。

 double x_max=MathMax(iBBMidle[ArrayMaximum(iBBMidle)],iBBUp[ArrayMaximum(iBBUp)]);
     

MathMin関数は、 2 つの値のうち、最小の値を返します。

 double x_min=MathMin(iBBMidle[ArrayMinimum(iBBMidle)],iBBUp[ArrayMinimum(iBBUp)]);
 
kourosh1347:

こんにちは。

MathMax関数は、2つの 値の最大値を返します。

MathMin関数は、 2 つの値のうち、最小の値を返します。

はい、グッドキャッチです ;-)
 
kourosh1347:

こんにちは。

MathMax関数は、2つの 値の最大値を返します。

MathMin関数は、 2 つの値のうち、最小の値を返します。

はい、あなたは正しいです。

私がやりたいことは、BBUp-BBLow/iBBMiddleです。

そして、それが幅だった名前を付け、値が増加した場合、値は幅に戻ります 例:幅>0は買いオープン(上側ブレイクアウト)、幅<0は売りオープン(下側ブレイクアウト)。

正確な実装方法はわかりません。

私はそれをNural Networkメソッドでコード化しようとしています。

どのようにそれを実装してください助けてください。

 
surubabs:

はい、その通りです。

私がやりたいことは、iBBUp-IBBLow/iBBMiddleです。

そして、それが幅だった名前を付け、値が増加した場合、値は幅に戻ります 例:幅>0は買いオープン(上方ブレイクアウト)、幅<0は売りオープン(下側ブレイクアウト)。

正確な実装方法はわかりません。

私はそれをNural Networkメソッドでコード化しようとしています。

どのようにそれを実装してください助けてください。

人生において大きな目標を持つことは良いことです。
 
surubabs:

はい、その通りです。

私がやりたいことは、iBBUp-IBBLow/iBBMiddleです。

そして、それが幅だった名前を付け、値が増加した場合、値は幅に戻ります 例:幅>0は買いオープン(上方ブレイクアウト)、幅<0は売りオープン(下側ブレイクアウト)。

正確な実装方法はわかりません。

私はそれをNural Networkメソッドでコード化しようとしています。

どのようにそれを実装してください助けてください。

あなたの "幅 "とニューラルネットの 関係は?ついていけませんね。