初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 544

 
Vitalii Ananev:
インジケーターの 設定で、自分でレベルを手動で設定する必要があります。デフォルトではレベル50は存在しない。上の写真で示しました。

したのですが、反映されません。また誤解していたようです(

extern double RSI          = 10;
extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
extern double Lots         = 0.01;
extern int    Slip         = 30;
extern int    Magic        = 125;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=70,uroven30=30,uroven50=50;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>uroven70) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<uroven30) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 
Vitalii Ananev:

RSIはオシレーターであり、トレンドを示すものではありません。

別のトレンド指標を 追加する(例:MA

言いたいことはわかるが、ミューイングがないと混乱してしまう。

私にとって重要なのは、論理的・技術的に正しいアルゴリズムであることです。

私は、30以下-売り、70以上-買い、とだけ開きます。

 
edutak:

言ってることはわかるんだけど、やっぱりムービングがないとね~、混乱しちゃうんだよね。

私にとっては、論理的・技術的に正しいアルゴリズムを作ることが最大のポイントです。

私は、30以下-売り、70以上-買い、とだけ開きます。

そして、rsiが下から上に50を超えたら買い、上から下に50を超えたら売りというように、より良い方法をとります。

void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=70,uroven30=30,uroven50=50;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   rsi2=iRSI(Symbol(),0,10,PRICE_CLOSE,2);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>=uroven50 && rsi2<uroven50) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<=uroven50 && rsi2>uroven50) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 

そうしました。そうだろ?

extern double RSI          = 10;
extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
extern double Lots         = 0.01;
extern int    Slip         = 30;
extern int    Magic        = 125;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int kolpos=0;
   double rsi=0,uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;
   rsi=iRSI(Symbol(),0,10,PRICE_CLOSE,1);
   for(int pos=0; pos<OrdersTotal(); pos++) 
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;
     }
   if(kolpos==0)
     {
      if (rsi>RSI_uroven_1) 
         OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,"",Magic,0,clrGreen);
      if (rsi<RSI_uroven_2) 
         OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,"",Magic,0,clrRed);
     }
 }
 
Vitalii Ananev:

そして、RSIが50を超えたら下から上へ買い、上から下へ売りと、よりうまくやることです。

いや、違う考え方もあるんです。
 
edutak:

そうしました。そうだろ?

論理エラーがないこと。

...

uroven70=RSI_uroven_1,uroven30=RSI_uroven_2,uroven50=RSI_uroven_3;

その場合、この項目は不要となります。

 
Vitalii Ananev:

論理エラーがないこと。

...

この場合、この項目は冗長になります。

ありがとうございます。では、やり直して次に進みます。
 
edutak:
ありがとうございます。では、やり直して次に進みます。
どういたしまして。頑張ってください。
 
待てよ、じゃあどうやって外部設定に持っていくんだ?
 
edutak:
ちょっと待って、じゃあどうやって外部設定に入れるの?

外部設定に何を入れるか?

レベルが最適化され、ユーザーによって変更される設定のことを指しているのであれば、すでに設定されているはずです。

extern double RSI_uroven_1 = 70;
extern double RSI_uroven_2 = 30;
extern double RSI_uroven_3 = 50;
理由: