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

 
voron_026:

こんにちは、Aleksey Vyazmikin 私は最近、プログラミングを始めました。少しずつですが、このテーマに入り込んでいます。

こんな風にやってみたんです。

最初の矩形が描画され、残りの矩形は描画されません。どうすればいいのか、まだ考えているところです。ヒントをありがとうございます。また、ノンタイプのスタイルとはどういう意味でしょうか?


同じ座標にたくさんのオブジェクトが描かれているのではなく、1つのオブジェクトが描かれているのは確かですか?

ポイント定数を持っているんですね。

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

関数内で定義するか、オブジェクトを作成 する際にコード内で直接定義します...

典型的な例ですが、計算機能がひねくれていたり、if(!)のような表現は、私の見たところ、あまり初心者が使わないような気がします。

 

こんにちは。


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

ある指標(I-1)と、その上に構築された別の指標(I-2)の相対的な位置を計算するにはどうすればよいのでしょうか。


例えば、こんな感じです。

ボリンジャーに対するRSIの位置づけ。

価格計算ではなく、データで代用できるのでは?

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
でも、エラーが出るんです。
 
Ras al Ghul:

こんにちは。


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

ある指標(I-1)と、その上に構築された別の指標(I-2)の相対的な位置を計算するにはどうすればよいのでしょうか。


例えば、こんな感じです。

ボリンジャーに対するRSIの相対的な位置づけ。

計算価格ではなく、データで代用することも可能かと

が、エラーになる。

RSIでbbをどのように構築したのか、つまり、どのように行ったのかが明確な絵でもない...。


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

価格の種類が正しくありません。

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

典型的な例ですが、あなたの計算機能はひねくれていますし、私の観察によれば、このような式はほとんど初心者が使うものではありません。


なるほど、そういうことだったんですね。自分のスタイルが確立されてきたのかもしれませんね。私はこのフォーマットでif(!...)演算子を使うのが好きです。また、計算機能は他の人から譲り受けたものですが、このロジックは気に入っています。

 
Aleksey Vyazmikin:

RSI bbをどのように構築したのかも不明で、つまり絵は出来上がったようなクリアなものなのですが...。


価格の種類が正しくありません。

ご返信ありがとうございました

自分の思いがどこに向いているのかが明確になりました。


画像はMT4標準ツールでの説明用です(前/最初のインジケータによる。)


配列はjavaしか知らないので...。私はjavaで配列に精通しています。

どのように作成し、何を置けばいいのでしょうか?

MetaEditorやMQLQL WizardのF1では、よくわかりませんでした...。

 
voron_026:

言いたいことはわかります。自分のスタイルが確立されてきたのかもしれませんね。私はこのフォーマットでif(!...)演算子を使うのが好きです。計算機能は他の人から譲り受けたものですが、そのロジックが気に入ったのです。


深い考えをお持ちの方なんですね~、頑張ってください。

 
Ras al Ghul:

ご返信ありがとうございました

自分の考えをどこに向ければいいのかが明確になったのです。


画像はMT4標準ツールでの説明用です(前/最初のインジケータによる。)


配列はjavaしか知らないので...。Javaで配列に詳しいのは、ちらっと見ただけです。

どのように作成し、何を置けばいいのでしょうか?

MetaEditorのF1やMQL-learningでは、何も分かりませんでした...。


配列を作成し、ループ(forなど)を通して、インジケータの値で埋める。そして、iBandsOnArray() 関数を使用します。

 
Aleksey Vyazmikin:

配列を作成し、ループ(例えばfor)を使ってインジケータ値で埋める。そして、iBandsOnArray() 関数を使用します。


あなたのバージョンが非常に複雑なのか、それともあなたの言っている値が理解できないのか...。


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

私のバリアントは、選択したフラグメントでエラーを発生させます。

'Array' - 配列が必要です。

インジケータの値を配列に取り込む方法ではないでしょうか?


 
Aleksey Vyazmikin:

描画されるオブジェクトは1つで、同じ座標に多数描画されているわけではないのですか?



はい、おっしゃるとおりです。矩形は同じ座標に描画されます。私は、次の方法で問題を解決しました。

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
計算されたタイムフレームを素早く変更するために、TimeFrameという 変数を追加しました。
 
Ras al Ghul:

あなたのバリアントが非常に複雑なのか、それともあなたの言っている値が理解できないのか......。


私のバリエーションでは、ハイライトされた部分が宣誓しています。

'Array' - 配列が必要です。

インジケータの値を配列に取り込む方法ではないでしょうか?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);