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

 
sile:

こんにちは。

よろしくお願いします。

最初のバーでインジケーターラインが クロスしたときにシグナルを出す。

ma_shiftT = 0 かつ ma_shiftD = 0 の場合、ポジションは最初のバーで正しく開きます。

最初のバーでクロスされた場合、ポジションを建てるにはどうしたらよいですか?


input int      ma_shiftT=-1;
input int      ma_shiftD=1;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;    // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];  // 

//+------------------------------------------------------------------+
int OnInit()
  {
//---
m_symbol.Name(Symbol());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease(iTEMAHandle);

   IndicatorRelease(iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  //--- массив значений индикатора
   ArraySetAsSeries(ma1Val,true);

//--- массив значений индикатора
   ArraySetAsSeries(maVal,true);
  
  if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
     {
      Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
      return;
     }
//====
  if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
     {
      Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
      return;
     }
   if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
     {
      Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
      return;
     }

   bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
   bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
  
   if(Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

第一回:1つしか使わないのに、なぜ5つの指標値をコピーするのか?

2番目。指標線の位置は、そのクロスオーバーを示すものではありません。

最初の値から順に、2つの値をコピーすればよい。

CopyBuffer(iTEMAHandle, 0, 1, 2, ma1Val)

CopyBuffer(iDEMAHandle, 0, 1, 2, maVal)

交点があるかどうかは、2本目のバーと1本目のバーの線の位置を比較することでしか判断できない。を、その課題に応じて使い分ける。

配列のインデックスの方向を考慮する必要がある。この場合、次のようになります。

if(maVal[0] <= ma1Val[0] && maVal[1] > ma1Val[1])

この条件を満たせば、交差の事実は明らかである。交差する方向は自分で決めることができます。


ps; あ、そうか...。交差の事実の定義をよく見ていなかった。まあ、いずれにせよ余分な値は必要ありません。おそらく、それらがあなたを突き放したのでしょう。

 
sile:

こんにちは。

よろしくお願いします。

最初のバーでインジケーターラインが クロスした時にシグナルを出す。

ma_shiftT = 0 かつ ma_shiftD = 0 の場合、ポジションは最初のバーで正しく開きます。

最初のバーでクロスしたときにポジションを建てるにはどうしたらよいですか?


input int      ma_shiftT=-1;
input int      ma_shiftD=1;
int iTEMAHandle;   // хэндл индикатора iTEMA
int iDEMAHandle;    // хэндл индикатора
double ma1Val[]; // динамические массивы для хранения численных значений  для каждого бара
double maVal[];  // 

//+------------------------------------------------------------------+
int OnInit()
  {
//---
m_symbol.Name(Symbol());  
//--- Получить хэндл индикатора iTEMA
iTEMAHandle=iTEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftT,PRICE_CLOSE);;
//---Получить хэндл индикатора
iDEMAHandle=iDEMA(_Symbol,PERIOD_CURRENT,30,ma_shiftD,PRICE_CLOSE);;
  
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease(iTEMAHandle);

   IndicatorRelease(iDEMAHandle);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  //--- массив значений индикатора
   ArraySetAsSeries(ma1Val,true);

//--- массив значений индикатора
   ArraySetAsSeries(maVal,true);
  
  if(CopyRates(_Symbol,_Period,0,5,mrate)<0)
     {
      Alert("Ошибка копирования исторических данных - ошибка:",GetLastError(),"!!");
      return;
     }
//====
  if(CopyBuffer(iTEMAHandle,0,0,5,ma1Val)<0)
     {
      Alert("Ошибка копирования буферов индикатора TEMA - номер ошибки:",GetLastError(),"!!");
      return;
     }
   if(CopyBuffer(iDEMAHandle,0,0,5,maVal)<0)
     {
      Alert("Ошибка копирования буферов индикатора DEMA - номер ошибки:",GetLastError());
      return;
     }

   bool Sell_Condition_3=(maVal[2]<=ma1Val[2]);
   bool Sell_Condition_4=(maVal[1]>ma1Val[1]);
  
   if(Sell_Condition_3 && Sell_Condition_4)
   {
   // открываю позицию SELL
   }
  }

この例では、複数の値をコピーするのではなく、一度に1つの値をコピーしています。私の例が返すものと、あなたの例が返すものを比較することで、あなたは - あなたの例の配列でどのようにインデックス付けが行われるか(すなわち、バー1の要素が配列のどこに格納され、バー2の要素がどこに格納されているかを理解する必要があります) - を見ることができます。

私の例でどう動くか。

設定例専用のチャートテンプレートを、設定例と同じ名前「Two iMA Shift minus shift plus.tpl」で作成し、保存しました。このテンプレートは、ターミナルの \MQL5ProfilesTemplates フォルダに保存してください。テスターを起動すると、テスターはこのテンプレートをピックアップし、テスター内にこのような素敵な画像を表示することができます。

無題

交差点を検知すると、指令のところで停止します

//---
   if(ma_one_1<ma_two_1 && ma_one_2>ma_two_2)
     {
      string text="ma_one_1 = "+DoubleToString(ma_one_1,Digits()+1)+"\n"+
                  "ma_two_1 = "+DoubleToString(ma_two_1,Digits()+1)+"\n"+
                  "ma_one_2 = "+DoubleToString(ma_one_2,Digits()+1)+"\n"+
                  "ma_two_2 = "+DoubleToString(ma_two_2,Digits()+1);
      Comment(text);
      DebugBreak();
     }

テスターで "十字線 "を使ってバーの上を移動し、バー1とバー2の指標の値を見ることができます("データ・ウィンドウ "をあらかじめ入れておきます)。

 

こんにちは。

FOREXのスプレッドについて質問です。

スプレッドが広がるとき、ASKは上がり、BIDは下がるのか、それとも両者は対称的に異なる方向へ動くのか?

 
Sergey Zhukov:

こんにちは。

FOREXのスプレッドについて質問です。

スプレッドが広がるとき、ASKは上がり、BIDは下がるのか、それとも両方が異なる方向に対称的に動くのか?

どっちでもいいかもしれません。スプレッドとは、売呼値と買呼値の差であることに変わりはありません。
 
Vladimir Karputov:
何でもいいんです。スプレッドとは、売呼値と買呼値の差であることに変わりはありません。
スプレッドが狭まり始めると、同時に互いに向かっていくことができる、という理解で合っていましたか?
 
Sergey Zhukov:
スプレッドが狭まり始めると、同時に互いに向かっていくことができる、という理解で合っていましたか?

"ひとつだけ変わらないのは、スプレッドがAsk価格とBid価格の差であるということです。"

それ以外の法律はありません。

 
Vladimir Karputov:

"ひとつだけ変わらないのは、スプレッドがAsk価格とBid価格の差であるということです。"

それ以外の法律はありません。

例えば、私が買いを持っていて、スプレッドが広がり始め、Askが上がり、Bidが下がった場合、ポジションを閉じるべきか、Askが下がるのを待つべきか、どう思われますか。
 
Sergey Zhukov:
買いを持っていて、スプレッドが広がり始め、Askが上がり、Bidが下がった場合、ポジションを閉じるべきか、Askが下がるまで待つべきか、どう思われますか。

買い(BUY)ポジションは、Bid価格で決済されます。

もうひとつ、「超高ボラティリティの時期はどうすればいいのか」という疑問もあるでしょう。答えは、人によって判断が異なるということです。

 
Vladimir Karputov:

買い(BUY)ポジションは、Bid価格で決済されます。

もうひとつ、「超高ボラティリティの時期はどうすればいいのか」という疑問もあるでしょう。答えは、人によって判断が異なるということです。

そうですね、超高ボラティリティというのはそういうことですね、フォーラムで検索してみます、ありがとうございます。
 
Vladimir Karputov:

買い(BUY)ポジションは、Bid価格で決済されます。

もうひとつ、「超高ボラティリティの時期はどうすればいいのか」という疑問もあるでしょう。答えは、人によって判断が異なるということです。

ええ、まあ...そんなブローカーはどこにあるのか...。リンク先を教えてください。
理由: