インジケーター、テキスト間のDISTANCEの自動制御に関するアドバイスが必要(MT-4)

 

プログラマーの皆様、こんにちは。
アドバイスをお願いします。

我々は、指標の形でExpert Advisorを作る!そのタスク - チャート上のパターンを検索し、テキストを書くためにバーの上に(複数行(!)、次のとおりです。

1行目 "信号名"
2行目 "% probability"
3行目 "icon" (矢印)

問題は、線間の距離をFIXして設定した場合=例えば25 pips、m5ですべて順調です.が、H1=では行が離れすぎてしまう(これは固定テキストの問題(!!))。


アドバイスお願いします - TFが変化したときの線間の距離や、グラフが少し左にずれたときの「高さ」を、高さで「自動計算」するにはどうしたらいいでしょうか(???!)

......ひとつだけ、思い当たることがあります。

1) 現在のチャートの高さ(最低価格と最高価格)を「取得」する:


2) 最大値-最小値=「チャートの高さ(pips)」であり、常に100%として扱います。

3) 「ライン間の固定距離(25ピップス)」の代わりに、距離をパーセントで指定(例:ポイント2からのチャート高さの2%)。


......プログラマーに聞いたところ、オブジェクトを動かしてはいけないそうです。チャートを反転させた後、複数行のテキストが重ならないように位置を変える == チャートを反転させた後、テキストをすべて削除する == チャートの新しい高さ(ポイント2)を考慮して、テキストを新たに書き直す必要がある(!) == チャートの反転後、テキストをすべて削除し、新たに書き直す。


......そして、私は考え続けました== OK、== SCREEN GUIDEにのみ描画を行う場合はどうでしょう?

それは、= OK、新しい信号が書き込まれます 正しいが、残っているもの= = = OR再び互いの上に戻ってフィット、またはその逆=さらに広いストレッチ(お互いに上下に) "あなたはすでに描画オブジェクトを動かすことはできませんが、唯一のそれらを削除し、新たに(!)再描画する必要があるので。


あなたへの質問=すでにこのような問題に遭遇した人はいますか? どのようにこの問題を解決したのですか?)))
(チャートのどのスケールと高さでも、マルチラインテキストが通常の行間に戻るように (定規で目測した場合 == 目視で3mm) ...。つまり、行間はDYNAMICであるべきです)?)))))))))

ただ、1行で、しかも45度(!)の角度で、全部の文字を作るのは嫌なんです。なぜなら、文字を水平にして、2~3行で作る方が視覚的に便利だからです :)

アドバイス(体験談の共有)をお願いします。


ありがとうございました)。

 
Vitaliy Kostrubko:


このショートコードを勉強すれば、あなたの役に立つかもしれません。全てはCanvasで実装されています。

Canvasの良いところは、MT4とMT5でコードがほぼ同じになることです。

ファイル:
 
Vitaliy Kostrubko:

プログラマーの皆さん、こんにちは。
ベストなアドバイスをお願いします。

...


ありがとうございました ))

キャンバスに描く。

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
  • www.mql5.com
Стандартная библиотека / Пользовательская графика / CCanvas - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
おっと...ニコライに先を越された...。
 

正しい考え方ですね。

//подсчитывает количество пунктов цены в одном пикселе
double GetPointsInPixel(long eChartId, int eWindow)
   {
   double eMin=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MIN,eWindow,eMin);
   if(eMin==EMPTY_VALUE) return(0);
   double eMax=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MAX,eWindow,eMax);
   if(eMax==EMPTY_VALUE) return(0);
   long ePixels=-1;
   ChartGetInteger(eChartId,CHART_HEIGHT_IN_PIXELS,eWindow,ePixels);
   if(ePixels<=0) return(0);
   return(double(eMax-eMin)/ePixels);
   }

double eIndent=GetPointsInPixel(eChartId,eWindow)。

そして、イベントが変化したときに、この値を必要な価格に加減する。

-時間軸の変更

-チャートの増加/減少。

-価格帯の縮小

 
Nikolai Semko:

このショートコードを勉強すれば、あなたの役に立つかもしれません。全てはCanvasで実装されています。

Canvasの良いところは、MT4とMT5でコードがほぼ同じになることです。

OK、ありがとうございます )

 
Artyom Trishkin:
おっと...ニコライに先を越された...。

...))))要は思いが同じということですね ))))
ありがとうございました )))))

 
Aleksei Stepanenko:

正しい考え方ですね。

double eIndent=GetPointsInPixel(eChartId,eWindow)。

そして、イベントが変化したときに、この値を必要な価格に加減する。

-時間軸の変更

-チャートの増加/減少。

-価格スケールの縮小/縮小。

ありがとうございます。)

 

Vitaliy Kostrubko:

アレクセイ・ステパネンコ

正しい考え方ですね。

double eIndent=GetPointsInPixel(eChartId,eWindow)。

そして、イベントが変化したときに、この値を必要な価格に加算または減算します。

-時間軸の変更

-チャートの増加/減少。

-価格スケールの縮小/縮小。

ありがとうございます。)

そして、その悲惨なコンサルタントに、○○コーダーの例ではなく、言語の勉強から始める必要があると伝えてください。

 
Alexey Viktorov:

そして、その悲惨なコンサルタントに、○○コーダーの例ではなく、言語の勉強から始める必要があると伝えてください。

コピー ))))
...様々なEA(複雑さのレベルが異なる)を使って10年間プログラミングの経験を積んでも、コーディングの全分野を知るには十分でないことを時間が示しています。)
この10年間で、2/3のプログラミング言語のスーパープロフェッショナルになれるのですから......。で、1/3も全く知らない))
だから気を悪くする必要はない))が、この1/3の部分を使いこなすかどうか=個人の問題です))。

....彼はただ、「利益をもたらす狡猾なアルゴリズム」に興味があるだけだ。そして、「漫画」を書くことは、彼の興味ではない.

でも、あなたの例は必ず彼に見せます)))。
ありがとうございました ))))

 
Vitaliy Kostrubko:

持ってけ )))))
...10年以上の様々なEA(複雑さのレベルが異なる)のプログラミング経験でも、TOTALのコーディング領域を知るには十分でないことを時間が示している)
この10年間で、2/3のプログラミング言語のスーパープロフェッショナルになれるのですから......。で、1/3も全く知らない))
だから気を悪くする必要はない))が、この1/3の部分を使いこなすかどうか=個人の問題です))。

....彼はただ、「利益をもたらす狡猾なアルゴリズム」に興味があるだけだ。と「アニメ」は彼の興味ではない.

でも、あなたの例は必ず彼に見せます)))。
ありがとうございました ))))

私を参考にする必要はありません。そのオプション、使ってはみたものの、声には出さなかったんです。私は、名越の意見を支持しただけです。

そして、もし「プログラマー」がグラフィカルなオブジェクトを動かすことが 不可能だと語るなら、それはプログラマーではなく、プログラマーのパロディですらなく、ただの「○○コーダー」である。
理由: