ライブラリ: MT4Orders - ページ 37

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

エキスパートアドバイザー:エクイティ・トラル

fxsaber, 2019.04.30 22:57

MT5でこのEAを変換する

#define  MT4_TICKET_TYPE // OrderSendとOrderTicketがMT4と同じ型(int)の値を返すようにします。
#include <KimIVToMT5.mqh> //https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "ind4to5.mqh" //https://c.mql5.com/3/277/ind4to5.mqh

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL, const color Color = clrNONE )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) &&
         ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color)));
}

void OnInit() { init(); }
void OnDeinit( const int ) { deinit(); }
void OnTick() { start(); }

#include "Equity_Tral.mq4" //https://www.mql5.com/ja/code/12354
 

私は自己啓発のための指標変換の特殊性を研究している。さらに3つのインジケーターを紹介します。

#define  MT4_TICKET_TYPE // OrderSendとOrderTicketがMT4と同じ型(int)の値を返すようにします。
#include <KimIVToMT5.mqh> //https://c.mql5.com/3/263/KimIVToMT5.mqh

#define  MT4_OLD_EVENT_HANDLERS
#include "ind4to5.mqh" //https://c.mql5.com/3/277/ind4to5.mqh

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL, const color Color = clrNONE )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) &&
         ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color)));
}

int WindowFind( const string ) { return(ChartWindowFind()); }
int Digits( void ) { return(_Digits); }
string StringTrimRight2( string Str ) { StringTrimRight(Str); return(Str); }
string StringTrimLeft2( string Str )  { StringTrimLeft(Str); return(Str); }
string ObjectDescription( const string name ) { return(ObjectGetString(0, name, OBJPROP_TEXT)); }

#define CORNER_LEFT_LOWER  2
#define CORNER_LEFT_UPPER  0
#define CORNER_RIGHT_LOWER 3
#define CORNER_RIGHT_UPPER 1
#define  CORNER(A) ((A) ? ((A) + 1) % 3 + 1 : 0)

bool ObjectSet2( const string name, const ENUM_OBJECT_PROPERTY_INTEGER property, const long value )
{
  return((property != OBJPROP_CORNER) ? ObjectSetInteger(0, name, property, value)
                                      : ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER(value)) && 
                                        ObjectSetInteger(0, name, OBJPROP_ANCHOR, CORNER(value) << 1));
}

bool ObjectSet2( const string name, const ENUM_OBJECT_PROPERTY_DOUBLE property, const double value )
{  
  return(ObjectSetDouble(0, name, property, value));
}

#undef  CORNER

template <typename T>
bool ObjectCreate2(const string name, const T type, const int subwindow, const datetime time1, const double price1,
                                                                        const datetime time2 = NULL, const double price2 = NULL)
{
  return(ObjectCreate(0, name, (ENUM_OBJECT)type, subwindow, time1, price1, time2, price2));
};

template <typename T>
bool ObjectCreate2(const long chart_id, const string name, const T type, const int subwindow,
                   const datetime time1, const double price1, const datetime time2 = NULL, const double price2 = NULL)
{
  return(ObjectCreate(chart_id, name, (ENUM_OBJECT)type, subwindow, time1, price1, time2, price2));
};

#define  TRUE  true
#define  FALSE false

#define StringTrimRight   StringTrimRight2
#define StringTrimLeft    StringTrimLeft2
#define  ObjectSet ObjectSet2
#define ObjectCreate ObjectCreate2
#define StringConcatenate StringConcatenate2

string StringConcatenate2( const string Str1, const int Str2 ) { return(Str1 + (string)Str2); }
string StringConcatenate2( const double Str1, const string Str2, const string Str3 ) { return((string)Str1 + Str2 + Str3); }
string StringConcatenate2( const string Str1, const string Str2, const string Str3 = "", 
                           const string Str4 = "", const string Str5 = "", const string Str6 = "", const string Str7 = "" )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6 + Str7);
}

string StringConcatenate2( const string Str1, const int Str2, const string Str3, 
                           const string Str4, const string Str5, const double Str6,
                           const string Str7,  const string Str8, const string Str9, const double Str10 )
{
  return(Str1 + (string)Str2 + Str3 + Str4 + Str5 + (string)Str6 + Str7 + Str8 + Str9 + (string)Str10);  
}

string StringConcatenate2( const string Str1, const int Str2, const string Str3, 
                           const string Str4, const string Str5, const double Str6,
                           const string Str7,  const string Str8, const string Str9,
                           const double Str10,  const string Str11, const double Str12 )
{
  return(Str1 + (string)Str2 + Str3 + Str4 + Str5 + (string)Str6 + Str7 + Str8 + Str9 + (string)Str10 + Str11 + (string)Str12);  
}

string StringConcatenate2( const string Str1, const int Str2, const string Str3, 
                           const double Str4, const string Str5, const double Str6 )
{
  return(Str1 + (string)Str2 + Str3 + (string)Str4 + Str5 + (string)Str6);
}

string StringConcatenate2( const string Str1, const double Str2, const string Str3, const string Str4 )
{
  return(Str1 + (string)Str2 + Str3 + Str4);  
}
   
string StringConcatenate2( const string Str1, const string Str2, const int Str3 )  { return(Str1 + Str2 + (string)Str3); }
   

#property indicator_buffers 0
#property indicator_plots 0

#define  Symb  SymbTmp
#define NULL  ""

#property indicator_separate_window
#include "TradeInfo.mq4" //https://github.com/icefx/tradeinfo/blob/master/TradeInfo.mq4

// #プロパティ indicator_chart_window
// #include "ProfitInfo.mq4" //https://github.com/icefx/profitinfo/blob/master/ProfitInfo.mq4

// #プロパティ indicator_chart_window
// #include "IceFX.DrawProfit.mq4" //https://github.com/icefx/drawprofit/blob/master/IceFX.DrawProfit.mq4

例によって、オリジナルのMT4コードには触れていません。

ソースコードを見れば、作者がコードでStringConcatenateを使っていることがよくわかる。バカとしか言いようがない!

 

TO: fxsaber

ありがとう。やることがたくさんあるね。脱帽だよ。

最後の2つのインジケータ(ProfitInfo、IceFX.DrawProfit)は本当に44のエラーを投げました。何かが欠けています。しかし、それは問題ではありません。

重要なのは、必要であれば、開発したものをすぐにMKL5に変換できるということです。

幸運を祈る。

追記:そろそろあなたの仕事をGitHubに移す時期かもしれませんね?
ファイル:
Err.zip  229 kb
 
Vladimir Perervenko:

最後の2つのインジケータ(ProfitInfo、IceFX.DrawProfit)は本当に44のエラーを投げました。何かが欠けています。

おそらく、誤ってどこかに余分な文字を残してしまったのでしょう。

追記:そろそろあなたの作品をGitHubに移す時期かも?

方法は知らない。そして、なぜプロファイルされたリソースから何かを移動するのでしょうか?

 
Vladimir Perervenko:
追記:そろそろ自分の仕事をGitHubに移したらどうだろう?

私は長い間それを提案してきた。レポを立ち上げ、定期的に更新を始めたが、その後、削除してしまった。


fxsaber:

なぜプロファイルされたリソースから何かを移動する必要があるのでしょうか?

1.更新を追跡するのに便利だからです(すべての編集を1つのリストにまとめたり、ソースをハイライトしたり...)。特に、kodobaseの全ファイルのアーカイブに関する問題(バグがまだ修正されていない?)

2.作業端末で)ワンクリックでどのバージョンにも切り替えられる。

3.クリック数回で新しいPCに同期。

4. ...

5.ローカルの独裁的な 管理からの解放。コメント、コード、記事、アカウントを削除するのは当たり前だ。そして異論を唱える者を追放するのは常套手段だ(私が言うことではないが)。


例えば、getch-aやhrenfxの開発は今や見つけるのが難しく、中には全く見つからないものもある。明日のfxsaberはどうなるんだろう?;)

 
fxsaber:


ソースを見れば、どの作者がコードでStringConcatenateを使っているかがよくわかる。バカバカしい!

正しい方法は?

で置き換えれば変換される。StringConcatenate() のパラメータが2つの場合は変換され、それ以上の場合は変換されない。

 
Vladimir Perervenko:

何が正しいのか?

Str = Str1 + Str2 + Str3 + ....;
 
Andrey Khatimlianskii:

しばらく前から提案していたんだ。レポを立ち上げ、定期的に更新を始めた。


1.更新を追跡するのに便利です(すべての編集を1つのリストにまとめたり、ソースでハイライトしたり...)。特に重要なのは、kodobaseの全ファイルのアーカイブに関する問題(バグはまだ修正されていない?)

2.作業端末で)ワンクリックでどのバージョンにも切り替えられる。

3.数クリックで新しいPCに同期。

4. ...

5.管理者の ローカルな横暴からの解放。コメント、コード、記事、アカウントの削除は日常茶飯事だ。そして、異論を唱える者を追放するのは常套手段だ(私が言うことではない)。

議論のリストをありがとう。このトピックについて調べてみるよ。

 
fxsaber:

議論のリストをありがとう。このトピックについて調べてみようと思う。

このフォーラムでも議論がありました。
BitBucket + utf8エンコーディング + 同期用SourceTree = レディ・リポジトリ
 
Andrey Khatimlianskii:
このフォーラムで議論があった。
BitBucket + utf8エンコーディング + 同期用SourceTree = レディ・リポジトリ

そして、最大5人が同時に編集権を持つことができます。