このMT3をMT4に変換するのは非常に簡単です。 - ページ 2

 

このMT3をMT4に変換してください - とても簡単です。

私はMT4からMT3への切り替えを検討しています。

私はちょうど私の非常に最初のエキスパートアドバイザーを編集し終えたところです。

MTとMQL4について十分に学ぶのに4週間ほどかかり、ようやく私のストラテジーをプログラムすることができましたが、今はプログラムをMQL2に変換するだけかもしれないと考えています。

このフォーラムで読んだ限りでは、MT4の利点は何も見当たりません。

私が読み、私のEAのバックテストを通して学んだことは、MT4ストラテジーテスターが 機能しないということです。この理由から、MT3で正確なバックテストができるように、あと数日かけて移行するのが唯一の道理だと考えています。

すでにMT3をダウンロードしてインストールし、エディタ辞書も見てみました。MT3はMT4よりも機能が少ないことがわかりますが、それが大きな問題になるとは思いません。

私が使っていたMQL4 EAの機能で、かなり頼りにしていたのは、注文が成立したときにスリッページで変化することがある、元の保留注文の価格を保存するためのOrderMagicNumberでした。

MQL2の注文にはOrderMagicNumberはありませんが、MQL2の辞書にOrderValueという関数があり、その説明には、この関数で注文のコメント(VAL_COMMENT)を取得できると書かれています。

このコメントを使って希望価格を保存できれば、MT3への乗り換えができそうです。しかし、注文のコメントを設定する方法が辞書に載っていませんでした。SetOrder関数の説明には、パラメータとして「comment」は記載されていません。

MQL2のこの機能に詳しい方、注文コメントをどのように設定するのか、教えていただけませんか?

 
BC Brett:

このフォーラムで読んだ限りでは、MT4の利点は見当たりません。

私が読み、私のEAのバックテストを通して学んだことは、MT4ストラテジーテスターが機能しないということです。この理由だけでも、MT3で正確なバックテストを行うために、数日かけて切り替える意味があると思います。

では、MT3バックテスターが MT4バックテスターよりも信頼性が高いというのは、どこで読んだのでしょうか?

これについては、非常に間違った情報を持っていると思います

MT4バックテストは非常に信頼できるものですが、それはあなたが持っているヒストリーデータの品質とあなたのモデリング品質%に依存します。

MQL2では、MT4プログラミングでできるような「コメント」の追加や「MagicNumbers」の割り当てを送信済み注文に行うことはできません。MT4プログラミングはMQL2プログラミングより進んでいます。

 

MT4のバックテストについては、こちらをご覧ください: http://www.strategybuilderfx.com/forums/showthread.php?t=15309&page=1&pp=8

(このページにアクセスできない場合は、メンバーとして登録する必要があります。)

 

私があちこちで集めた情報では、バックテストに少し真剣に取り組んでいる人々は、WealthLab、Amibroker、MetaStocksなどのソフトウェアを使用しており、mt3やmt4は使用していないようです。

多分、mt4のバックテストは、イントラバーデータを使用しない場合は、ほぼ大丈夫でしょう。例えば、日足バーで作業する場合、日足バーのOpenとCloseの値だけを使うべきです(StopLossesやTake Profitを設定する場合はHighとLowも使わないでください)。それ以外は一切使用しません。

なぜなら、彼らの「モデリング品質」がどうであろうと、リアルデータを使用するmt4のバックテスト方法は、「始値のみ」だからです。

"Every tick" と "Control Points" の方法は、素敵なおとぎ話です。個人的には、おとぎ話のようなデータのバックテストに基づいてお金を取引することはありません。

mt4はまだ勉強中ですが、私の経験上、mt4のバックテストは他に使いようがないと思います。私が提案した方法が100%信頼できるかというと、そうでもありません。もし私が良いバックテストをしたいのであれば、バックテストソフトを手に入れるでしょう。

mt4とmt3のライブ取引について:私があちこちで集めた情報では、mt4は信用できない。時々、mt4が約定しなかったと言った注文が、実際には約定していることがあります!これはブローカーから報告されました。もしこれが本当なら、mt4ライブトレードを提供しているブローカーは真剣ではありません。あるいは、mt4のバグが自分たちのプラットフォームで起きないようにしている、それもありえますね。

一方、mt3でのライブ取引は可能であることを「あちこちで集めた」(笑)。

 

このMT3をMT4に変換してください。

こんにちは、私は誰かが私のためにMT4の言語にこれを変換することができれば感謝します - 私たちのブローカーは、MT4にアップグレードしたばかりです。

以下はそのコードです。

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

どうもありがとうございました!

 
scott TTM:
ブローカーがMT4にアップグレードしたので、どなたかこれをMT4の言語に変換していただければと思います。

以下はそのコードです。

/*[[

Name := TTM Stoch

Author := Scott Black

Link := http://www.tradethemajors.com

Separate Window := yes

First Color := Cyan

First Draw Type := Line

Use Second Data := yes

second Color := Magenta

second Draw Type := Line

Minimum Chart Limits := 0.000000

Maximum Chart Limits := 100.000000

]]*/

Inputs : Slw(8),Pds(13),Slwsignal(9);

Variables : AA(0),bb(0),aa1(0),cnt1(0);

Variables : shift(0), cnt(0), loopbegin(0),loopbegin2(0),loopbegin3(0), first(True), prevbars(0);

Variables : sum(0), smconst(0),smconst1(0), prev(0),prev1(0),prev2(0),prev3(0), weight(0), linear(0);

Variables : MAValue(0),MAValue2(0),mavalue3(0), MAstring("");

Variables : MyHigh(0),MyLow(0),counter(0),Price(0),Price1(0);

SetLoopCount(0);

smconst = 2 / (1+SLW);

smconst1 = 2 / (1+slwsignal);

loopbegin = loopbegin+1;

For shift = 2000 Downto 0 Begin

prev = GetIndexValue2(shift+1);

AA =100* ((Close[shift] - Low[Lowest(MODE_LOW,shift+pds,Pds)]) / (High - low[Lowest(MODE_LOW,shift+pds,Pds)]));

MAValue2 = smconst * (aa-prev) + prev;

SetIndexValue2(shift,MAValue2);

loopbegin = loopbegin-1;

End;

loopbegin2 = loopbegin2+1;

For shift = 2000-pds downto 0 Begin

MyHigh = -999999;

MyLow = 99999999;

For counter = shift to pds + shift Begin

PRICE= GetIndexValue2(counter);

If Price > MyHigh Then

MyHigh = Price;

If pds <= 0 Then

MyHigh = Price;

If Price < MyLow Then

MyLow = Price;

If pds <= 0 Then

MyLow = Price;

end;

prev1 = GetIndexValue(shift+1);

aa1=GetIndexValue2(shift);

bb=100*(aa1-mylow)/(myhigh-mylow);

MAValue = smconst * (bb-prev1) + prev1;

SetIndexValue(shift,mavalue);

loopbegin2 = loopbegin2-1;

End;

loopbegin3 = loopbegin3+1;

For shift = 2000 downto 0 Begin

prev2=GetIndexValue2(shift+1);

prev3=GetIndexValue(shift);

MAValue3= smconst1 * (prev3-prev2) +Prev2;

SetIndexValue2(shift,mavalue3);

loopbegin3 = loopbegin3-1;

end;

/*[[

どうもありがとうございました!

こんにちは、Scott...

これを試してみてください...

ファイル:
ttm_stoch.mq4  5 kb
 

ヘルキャス

うまくいかなかったようですね。 www.compoundfx.com/mt3stoch.jpg にアクセスして、MT3チャートでどのように見えるかを見てください。これをアップロードしようとしたのですが、うまくいきませんでした。

ご苦労様です。もしかしたら、これが役に立つかもしれませんね。

MT4でプロットすると、マゼンタの線だけが表示され、シアンの線は表示されません - 入力があることはわかりますが。

スコット

 

こんにちは。

私のツールMql2Mq4でmqlインジケータを変換した後、私のファイルヘッダを保持していることに感謝します!

Metatrade 4 の Expert message log TabSheet (Panel) を見ると、この写真のように "Zero Devide exception" が表示されます。Indicatorのスクリプトでdivide演算子を使用していますが、NULLの 時もあります:-( これがこのエラーの理由です、繰り返しますがMetatrade 3ではこのような例外は発生しませんでした、しかしMetatrade 4では発生します。

MT3と同様に動作するように変換したものを置いておきますので、どのような変更を行ったか見てみてください。

さようなら

ファイル:
exception.jpg  52 kb
ttmstoch.mq4  5 kb
 

youskyさん

どうもありがとうございます!見た目は完璧です。 ありがとうございます。

-SB

 

yousky

OK、さらに検討した結果、まだ完全ではありません。 MT4ではまだ偽の数値が表示され、つまり線があるべきところで交差していないのです。 ここに載せてあるコードを使いました。 何かアイデアはありますか?

SB