

下記の関数をそれぞれmql4とmql5のOnInit()にいれて実行したのですが、mql4は問題なくスクリーンショットが取れて、mql5はpngファイルが出力されていますが、中身は真っ白な画像です。コンパイルエラーは両方ともなしです。ChartScreenShotの返却値は両方ともtrueです。違いが生じる原因はなんでしょうか？

[code]

    input int Width = 800;  //画像幅
    input int Height = 600; //画像高さ
    
    // スクリーンショット取得
    void tackPickture() {
       Print("呼ばれる!!!!!!!!!!!!!!!!");
       MqlDateTime current;
       TimeToStruct(TimeCurrent(), current);
    
       // yyyyMMdd_HHmmss形式に変換
       string timestr = StringFormat("%04d%02d%02d_%02d%02d%02d", current.year, current.mon, 
       current.day, current.hour, current.min, current.sec);
       string period_s = PeriodToString(Period());
       string name = Symbol() + "_" + period_s + "_" + timestr;
    
       //保存フォルダ 日毎に分ける
       string folder = StringFormat("%04d%02d%02d\\", current.year, current.mon, current.day);
       //ファイルはMQL4\Files\以下に保存される
       bool check = ChartScreenShot(0, folder + name + ".png", Width, Height, ALIGN_LEFT);
    
       if(check){
           Print("cap成功");
       }else{
           Print("cap失敗");
       }
    }
    
[/code]


CC BY-SA 4.0
2022-05-05T02:02:29.590
88652
2022-05-07T11:19:36.450
2022-05-07T11:19:36.450
3060
29442
question
mql4
なぜ同じコードでmql4でスクリーンショット取れるのに、mql5ではだめなのか


自己解決しました。  
違いはよくわかりませんが、もともと質問の目的はバックテストで価格変動したときに画像を取得することです。mt4でのバックテストでは `OnInit()`
でしか画像を取得できない ( `OnTick()` ではできない)
と思ったのですが、完全に勘違いしました。出力先を間違えました。バックテスト中の場合、出力先はMQL4のfileフォルダーではなく、tester配下のfileフォルダーです。

MT5では結局目的（価格変動したときに画像を取得する）を達成できないが、とりあえず、MT4できればそれでいいかなと思っています。


CC BY-SA 4.0
2022-05-07T02:31:13.403
88680
2022-05-07T11:12:01.327
2022-05-07T11:12:01.327
3060
29442
88652
answer