MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 204

 
STARIJ:

MAクロスはバーとバーの間で発生する - わかりやすい例を捕らえよう

交差点の左右のバーのMAが、交差点での価格と異なっている。質問者は、隣のバーの値ではなく、正確な交差点の値が欲しいのだと理解しています。この正確な値は、直線補間で求めることができる。結局のところ、バー間のMAは直線セグメントで構成されているのだ。または、隣接するバー上の各MAの座標を取る。2本の直線を解析的に構成し、その交点を計算する。2つの相似な三角形を考えて計算することが可能です。なぜ、それが必要なのかという疑問が湧いてきます。そのコストは、結果の価値に見合っているか?結局、MAパラメータを最小に変更すれば、交点は移動するのです。ほとんどの場合、コースプロジェクトの責任者から要求されます

わかりやすい説明ありがとうございました、なかなかできないことがよくわかりました
 
missha32:

計算の間違いが見つからない。
前日の高値と 安値を求めたいのですが、なぜか安値は前日になっています

CopyHighCopyLow を期間PERIOD_D1 と対応するバーまたは時刻で使用するのがよいでしょう。

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32: 前日の高値と 安値を求める必要があるのですが、なぜか安値は前日に見つかってしまうのです
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert("Максимум вчерашнего дня = ", iHigh(_Symbol, PERIOD_D1, 1));
   Alert("Минимум  вчерашнего дня = ", iLow(_Symbol,  PERIOD_D1, 1));
どの時間枠のバーも、対応する下位時間枠のバーの間隔の一般化された情報を含みます:最大、最小、間隔内の最初のバーの時間に等しい開始時間、 間隔内の最後のバーの時間に等しい終了時間、間隔内のバーの出来高の合計に等しい出来高。より正確には、この情報は各配列に含まれています。
 
STARIJ:
どの時間枠のバーも、対応する下位時間枠のバーの間隔を一般化した情報を含んでいます:最大、最小、開始と 終了時間、下位バーの出来高の合計に相当する出来高です。より正確には、この情報は、対応する配列

そうしたいのですが、昨日の他の値を検索する必要があったり、関数を再度書き直すのが面倒なので、さらなるアルゴリズムでデータを計算できないかもしれません。

私のコードのどこに間違いがあるのか、理解できません。バーの数を 表示しようとすると、すべて一緒に収まりますが、最大または最小を取得しようとすると、本来表示されるはずのものが表示されません。

 
missha32:

そうしたいのですが、昨日の他の値を探さなければならないかもしれないし、また関数を書き換えるのが面倒なので、計算できないかもしれません。

私のコードのどこに間違いがあるのか、理解できません。 画面にバーの 数を表示すると、すべてが収束しますが、最大または最小を取得しようとすると、本来表示されるはずのものが表示されません。

あまりにごちゃごちゃしすぎて、意味がわからなくなってしまった。片っ端から変換の山...。

そして、すべてはその日の最大値と最小値を見つけるため?

では、何がうまくいっていないのでしょうか?

//+------------------------------------------------------------------+
double GetPriceMaximum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены High: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
double GetPriceMinimum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены Low: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

その日の最高値を調べる必要がありますか?お願いします。

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,0);

昨日の最大値を調べる必要がありますか?簡単です。

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,1);

一昨日の安値を知りたい?問題ありません。

double min_price=GetPriceMinimum(Symbol(),PERIOD_D1,2);

まあ、簡単な方法として、純粋な4重関数を使うという手もある。

double price_max=iHigh(Symbol(),PERIOD_D1,1);

しかし、私はお勧めしません - 新しい言語構造を使用して、あなたはいつか4倍がサポートされていないことに自分自身とあなたのコードを準備し、自己規律とすべてのこと;)。

 
Artyom Trishkin:

整理するのさえ難しいほど、ごちゃごちゃにしてしまったんですね。あるものから別のものへの変換が山ほど...。

すべては、その日の高値と安値を見つけるために?

では、何がうまくいっていないのでしょうか?

その日の最高値を調べる必要がありますか?お願いします。

昨日の最大値を調べる必要がありますか?簡単です。

一昨日の安値を知りたい?問題ありません。

まあ、簡単な方法として、純粋な4重関数を使うという手もある。

しかし、私は勧めません。新しい言語構造を使うと、いつか四元数がサポートされなくなることを自分自身と自分のコードに覚悟させることになりますし、自己鍛錬やその他もろもろが必要です ;)。

自分でもミスを発見しました(不注意でパラメータiHighest, iLowestを読み間違えていました)。

そのため、昨日とは別の計算が必要になるため、適していません。

 
missha32:

自分でもエラーを発見しました(不注意でiHighest,iLowestのパラメータを読み間違えていました)。

昨日とは別の計算が必要になるため、適切ではありません。

他の計算のために、シンプルで自然な方法でデータを取得することが妨げられている理由がわからないのです。
 
missha32 赤信号は買い、青信号は売りで、各信号で埋められるようにする。

if(Red )OrderSend( ... Buy ... ) ; if( Blue ) OrderSend( ... Sell ... ) ... ...;

ただ、その逆で、上で売り、下で買う...。

OnInit関数(initを求める古いもの)は、インジケータの開始時(タイムフレームの変更、再コンパイル、...)に実行されます。使用されるすべての変数には値が割り当てられている必要があります。OnInit 関数 内に SetIndexDrawBegin(0,i-1) 行が存在する。i 変数に値を代 入するか、定数を使用する必要がある。

 
STARIJ:

if(Red ) OrderSend( ... Buy ... ) ; if( Blue ) OrderSend( ... Sell ... ) ... ... ...。

ただ、その逆で、上で売り、下で買う...。

OnInit関数(initを求める古いもの)は、インジケータの開始時(タイムフレームの変更、再コンパイル、...)に実行されます。使用されるすべての変数には値が割り当てられている必要があります。OnInit関数では、SetIndexDrawBegin(0,i-1)の行があります。変数iには値を代入 するか、定数を使用しなければなりません。

正直なところ、私はMql4プログラミングの初心者なので、何も理解していませんので、コードについて助けてください。
 
missha32:
正直なところ、私は何も理解していません。Mql4プログラミングの初心者なのですが、もしよろしければ、コードを手伝っていただけませんか?

コードは通常、フリーランスに役立ちます。

ここで - アルゴリズムのいずれか、またはあなたの間違いを修正する。でも、あなたのためにもう一度書き直すわけではありません。