MetaTrader拡張モジュール(DLL)の作成 - ページ 9

 

DLLが新しい刻みで更新されない

前回のDLL投稿(#81)の続きで、新たな問題が発生しました;DLLが次のように呼ばれたとき。

int start()

{

double Rates[][6];

int MaximumRecords = ArrayCopyRates( Rates, Symbol(), 0 );

for( int zz = MaximumRecords; zz >= 0; zz-- ) { OutPut[zz] = EMPTY; }.

GetSMAArray( Rates, MaximumRecords, Periods, OutPut );

return(0);

}

これは、チャート上に期待通りにプロットするという点ではうまくいきますが、残念ながら、新しい受信ティックで更新されません - それはちょうどその最初の呼び出しでプロットされます。DLLが受信ティックで更新されるようにするには、さらにどのようなコードを追加すればよいのでしょうか?私の検索はほとんどすべて、以下の使用方法のバリエーションに行き着きました。

ExtCountedBars = IndicatorCounted();

を使用してwhileループを強制的に計算するバリエーションがありますが、これらはすべて.mq4ファイル自体に含まれる計算に適用されます。DLLに強制的に再計算させたいのです。第二に、私はこの再計算がすべての、そしてすべてのティックの 到着ではなく、バーの完了時にのみ発生することを望みます。

 

Forループは次のようにします。

for(int zz=MaximumRecords-1;............................10 レコードは、配列の0から9の位置になります。

10 レコードは配列の0から9までの位置を取る

 
Tzuman:
Forループは次のようになります。

for(int zz=MaximumRecords-1;...............)

10 レコードは配列の0から9の位置を取ります。

これでもまだ、DLLは新しいティックに更新されないようです。

 

Mistigriのサンプル動画が見れません

皆さん、こんにちは。

どなたか、Mistigriのサンプルビデオをインターネット上で公開していただけないでしょうか?

 
jocinet:
こんにちは、どなたかMistigriのサンプルビデオをインターネット上で公開していただけないでしょうか?

でミスチルが再公開しました。

プロジェクト|PsNouvion

 

C#開発者のためのパス。MT4/5 -> C# DLL

C++ではなく、C#でMetatrader用のDLLを書きたいというC#開発者は、今、そのための道を歩んでいます。アンマネージドエクスポートを使ったC#コードのMQL5への公開」と題された非常に興味深い記事があります。

記事を読み・読み飛ばし、2.5節以降を読んでみてください。

アンマネージドエクスポートを使ってC#のコードをMQL5に公開する - MQL5 Articles

説明を読んでから、Template for C# "Unmanaged Export Library "をダウンロードし、zipファイルを正しいディレクトリに配置します(そのページの指示に従って)。

アンマネージドエクスポート用C#プロジェクトテンプレート

VSをロードし、"Unmanaged Export Library "テンプレートを選択します。コードサンプルに従います。これが誰かの役に立つことを願っています。

 

クリティカルエラーは 出るがクラッシュはしない、DLLの書き方はこれだ

MistigriFX Sample Debug (MFX_SD) を使って、Visual Studio 2008 ExpressでDLLを作成することができました。

しかし、おかしな問題が発生しています。

MFX_SDを3つ、異なる期間の入力でチャートに貼り付けても問題ない。しかし、2つ目のチャートに3つのMFX_SDを貼り付けると、2つのエラーメッセージ(関数 'GetSMAArray' call from dll 'Mistigri FX Sample 1.dll' critical error)とエキスパートが動作しなくなりました。

2つのチャートを見ると、1つのチャートでは3つのMFX_SDが毎ティックうまく動いていますが、別のチャートでは1つのMFX_SDだけが毎ティック動いていて、他の2つは動いていないことがわかります。

何かアドバイスがあればお願いします。

添付は、私がビジュアルスタジオ2008でDLLを書く方法です。私はあなたのVisual Studioからそれを読むことができるように、テキスト文書でこれを書いています。

あなたが何かエラーがある場合は、私のような初心者プログラマからのアドバイスに従ってから自分自身を呪ってください

事前に多くの感謝を。

ファイル:
 

クリティカルエ ラーの解決

何度も試行錯誤を繰り返した結果、ようやく「重大なエラー」メッセージを解決することができました(前の投稿を読んでください)。

それは、私が作った.dllの方法とは関係なく、MFX_SDコードのGetSMAArray関数のミスロジックと関係があります。

以下は、そのミスロジックを強調したMFX_SDのコードです。

for ( int i = 0; i < MaximumRecords; i++)

{

double Sum = 0.0;

for ( int k = 0; k < Period ; k++ )

{

Sum += Rates[MaximumRecords-i-1-k].close;

}

結果[MaximumRecords-i-1] = Sum / Period ;

}

例えば、Period = 2、MaximumRecord = 75、i = 74とした場合。この場合、以下のような計算誤差が生じます。

Sum += Rates[MaximumRecords-i-1-k].close;

というのは、MaximumRecord - i - 1 - kの結果が-1になってしまうからです。Rates [-1] の値はゼロだけなので、Sumの値もゼロになります。そして、SMAを計算しているので、sumをPeriodで割らなければならず、0を2で割ると、「クリティカルエラー」となり、エキスパートが停止してしまいます。

もし、これが信じられないなら、1分足のチャートに、入力期間が異なる複数のMFX_SDを貼り付けますが、そのうち一つのMFX_SDは入力期間=1でなければなりません。MTターミナルのウィンドウを見て、エキスパートタブをクリックします。すると、重大なエラーメッセージが表示され、エキスパートが動作しなくなります。しかし、チャートを見ると、期間=1のMFX_SDだけがまだ動作しています。

MistigriFXがビデオで示そうとしたのは、DLLの作成方法とDLLへの配列の渡し方だと思います。もし、SMAのロジックを修正しなければならないとしたら、見ているだけで頭が痛くなるようなビデオになってしまうでしょう。だから、正しくないけどシンプルなMAの例を見せてくれたのでしょう。

それでは、DL作成にお付き合いください。

 

MT4拡張機能-あなたのコース

こんにちは、codersguruです。

あなたのコースへのリンクをいくつか教えてください。

またはPDFマニュアルへのリンクを教えてください。

私はそれについてより多くを学ぶために任意の文献が必要です。

ありがとうございます。

よろしくお願いします。

Ivan

 

...

メタトレーダーのexpertssamples フォルダにあるサンプル(mqlとC++のソース、プロジェクトとdefファイル)がDLLコールについて知る必要のある全てです(メタトレーダーがサポートする全てのパラメータ タイプ、DLLとの通信をカバーしています)あとはあなたのC/C++の知識次第です。

holesovsky:
こんにちは、codersguruです。

あなたのコースへのリンクを教えてください。

またはPDFマニュアル。

私はそれについてより多くを学ぶために任意の文献を必要とします。

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

よろしくお願いします。

イワン