グラフィカルなオブジェクトを作成するにはどうしたらよいですか?MQL4です。 - ページ 5

 

EAのコードをスクリプトに転送してみました。

スクリプトでは線が重なっているのに、Expert Advisorではなぜ動かないのでしょうか?

Expert Advisorのビジュアライゼーションを開始する際に、チャートのサブウィンドウにオブジェクトを描画できた方はいらっしゃいますか?


 
forexman77:

EAのコードをスクリプトに転送してみました。

スクリプトでは線が重なっているのに、EAではなぜ動かないのか理解できないのですが?

Expert Advisor の視覚化を開始したときに、チャートサブウィンドウにオブジェクトを描画できた人はいますか?


描画するインジケーターのサブウインドウの番号を 指定します。
 
Artyom Trishkin:
描画するインジケータサブウインドウの番号を指定します。

こうすると、EAで-1が出ます。スクリプトでは、すべてうまくいき、上の写真のようになります。ADインジケーターの記事、何度も読みましたが、まだ理解できていません。いつものように、その理由は何か小さなことにある。

私が理解する限り、何らかの理由でEAでウィンドウが検出されず、エラー4206が発生します。

 
forexman77:

こうすると、EAで-1が出ます。スクリプトでは、すべてうまくいき、上の写真のようになります。ADインジケーターの記事、何度も読みましたが、まだ理解できていません。いつものように、その理由は何か小さなことにある。

私が理解する限り、何らかの理由でEAでウィンドウが検出されず、エラー4206が発生します。

インジケーターウィンドウの作成には時間が必要です。インジケータウィンドウでは、OnCalculate()の最初の呼び出しまで 描画できません。OnInit()で全て描画するのか?
 
Karputov Vladimir:
インジケーターウィンドウの作成には時間が必要です。インジケーターウィンドウでは、OnCalculate()の最初の呼び出しより 前に描画することはできません。OnInit()で全て描画するのか?
いいえ、取引が開始された後のみ、すなわち、最初にポジションの開始線が移動し、それが開かれたときにレンダリングが開始されます。

以下は、EA内のコードです。

string   shortName="fraktalSDV"; 
long   chart_ID=0;        // ID графика
int win_idx=ChartWindowFind(chart_ID,shortName);
string nameobj=TimeToStr(Time[0]);       
            //--- сбросим значение ошибки
            ResetLastError();
            //--- создадим трендовую линию по заданным координатам
           if(!ObjectCreate(chart_ID,nameobj,OBJ_TREND,win_idx,Time[index],maximum1,Time[1],TRENDmax[1]))
            {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
            }
ObjectSet(nameobj,OBJPROP_RAY,false); 

インジケーター自体に線があります。

IndicatorShortName("fraktalSDV");

 
forexman77:

こうすると、EAで-1が出ます。スクリプトでは、すべてうまくいき、上の写真のようになります。ADインジケーターの記事、何度も読みましたが、まだ理解できていません。いつものように、その理由は何か小さなことにある。

私が理解する限り、何らかの理由でEAでウィンドウが検出されず、エラー4206が発生します。

インジケータサブウィンドウが見つからない。インジケーターウィンドウの左上に表示されている、短いインジケーター 名で探してみてください。名前を全部入力して検索していないはずです。
 
Artyom Trishkin:
インジケータサブウィンドウが見つからない。インジケータウィンドウの左上に表示されている、短いインジケータ 名のサブウィンドウを探します。おそらく、名前を全部入れて検索することはないでしょう。

文字列shortName="fraktalSDV";

私はこのように呼んでいます。Expert Advisorでインジケータの名前を呼び出して設定を解除しようとしたのですが、今のところうまくいきません。

ここでは、インジケーターそのものを紹介します。後で削除します。

 
forexman77:

文字列shortName="fraktalSDV";

私はこのように呼んでいます。Expert Advisorでインジケータの名前を呼び出そうとしましたが、今のところうまくいきません。

で試してみてください。

int win_idx=ChartWindowFind(chart_ID,shortName);

インジケーターウィンドウの検索を入れずに、1つ(チャート上に1つしかウィンドウがないのでしょうか?)

うまくいったら、ウィンドウサーチを

long   chart_ID=0;        // ID графика

タイプイン

long   chart_ID=ChartID();
 
Artyom Trishkin:

を心がけてください。

インジケータウィンドウの検索の代わりに1を入力する(チャート上にウィンドウが1つあるか?)

チャート自体の上部に引用符で、下部にインジケーターのセパレーターで。
 
forexman77:
上部にあるのは、相場が表示されたチャート本体で、下部のセパレータムにはインジケータが表示されています。
だから、彼らの言うとおりにしてください ;)エラーを探さなければならない・・・。