オープンプロジェクト - テスタ・オプティマイザを自社開発

 
私は、インジケーターの形で独自のテスターを書くというアイディアを持っています。要件 - 最小限の手直しでExpert Advisorが 標準的なテスターと自作のテスターの両方に適していること。これは、標準の定数や関数にmyという 接頭辞をつけることで実現されています。最適化も可。
テンプレートが書かれているので、自分で関数を書いて取引機能を実装する必要があります。
得意な人、参加してください。配列操作で機能を売買する。また、チャート上にオブジェクトを描くエキスパートも必要です。矢印や図面を用いて、オープン、ストップ、テイクプロフィットレベルを表現してください。
また、Excelでチャートを開くために、注文履歴や数値系列の出力をファイルに整理する必要があります。総じて、何事も真剣勝負です :)

私は原理的には何でも考えてきましたが、万能主義者ではありません。

誰かが望むなら、私はアイデアを提案することができます。また、性能的に最適化された自作バリアントが、自作バリアントを凌駕することもあり得ます。

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+




 
どんなちんぷんかんぷんなものが出てきたのやら。もし欲しい人がいたら、別の掲示板のどこかに掲載します。
 
2 ロッシュ
このプリセットで何を言いたいのか、よくわからないのですが。私見ですが、利益計算と同時にチャート上にエントリー/ストップポイントをマークする機能を一式揃えたいのではないでしょうか?そして、意思決定エンジンはそれぞれ違うものになるのでしょうか?

そして、いくつかのヒントがあります。
extern int       BeginYear=2002


に替えた方が良い。

extern string       BeginDate="2002.01.01 18:00"


- のような構造ですぐに動作させることが可能です。

Time[i] > StrToTime(BeginDate)



はい、そしておそらく以下のようなものです。

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


として保存するのも便利でしょう。

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


が、それはあくまで些細なことであって......。

 
フィリンさん、底が浅いですね。なぜ定数
を定義する必要があるのでしょうか?
#define LOTS 0;

テスターの入力変数です。

これはどこから来たのですか?

#define OPEN_PRICE 1;


これらの変数(関数で定義した方が良いかもしれません) 、お気づきでしょうか?

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

mql-4に内蔵された双子のようなものです。我々のテスターと組み込みテスターが最小限の手直しで
EA を理解することが目標であると書きました。

判断エンジンはEAコードです。そして、このEAに簡単に統合されることになります。
つまり、標準の組み込み関数、例えばOrderSend() を使って、完全に似たような関数、myOrderSend()を書くのです。といった具合に。
この機能をより明確にするために、今夜はこの機能を書きます。

もっと徹底的に、もっと徹底的に... :)

 
どんなちんぷんかんぷんなものが出てきたのやら。もし欲しい人がいたら、どこかの別の掲示板に載せますね。

これは少し前に登場したものです。MQLからテキストを転送すると、このようにロシア語の文字が表示されます。FronPageがロシア文字でやっているのと同じことです。
 
インジケータファイルにコピー&ペーストすると、筆記体の文字がロシア文字に戻ると思っていました。そうではないことがわかった。今夜、別の掲示板に投稿します
をクリックすると、リンクが貼られます。
 
ロッシュ
ゴミを消せないのか?
見るに耐えない。
ロシア語のテキストを含むスクリプトをコピーする際に、フォーラム、ホスティング、MTの不具合が発生するのでしょう。
 
このような形でのテストが可能です。そして、それで十分なのです。でも、残念ながらユニバーサリズムは得られません。
そんなテストに2週間ほど費やしたことがあります。一見、シンプルに見えますね。標準的な機能を一通り揃えて、いざ出陣。
しかし、このセットは、オープニング/クロージング、損益計算、矢印/ダッシュを描くという、種明かしに過ぎないのです。
メインで最も重要なのは、開閉のアルゴリズムで、これは、すでにいくつかのExpert Advisorで説明されていると言うことです。このアルゴリズムはドラッグ&ドロップできません
を全文掲載します。部分的にしかできない。そして、出来上がったコードの「エラーフリー」を追跡する...。さらに、このプロセスに付随するさまざまな紆余曲折も......。
いろいろといじりながら...。要するに、2回目も同じテーマで別のプログラムを一から書くことになるのです。その結果、1秒後には
を、満足のいく結果が得られないか、矢印の位置が悪いか、閉じる位置が悪いかのどちらかです。そして、プログラムテキストに戻って再挑戦する...。
デバッガーの代わりに脳が働き、しばらくの間モニターになる...。結局、3日目にはテストラン
はいいのですが、その戦略は「よくない」と確信するようになります。そして、この時点で、かなりの確率で、「これだ!」と思いました。このように次のストラテジーをテストすることで
次の戦略を試そうという気も起きない。なぜ、こんなことを書いたのか?アイデアは魅力的です。そして、原理的にはうまくいくのです。でも、信じてください。
うまくいかないテンプレートということであれば、非常に基本的なテンプレート、つまり、非常にまともで考え抜かれたデザインでなければなりません。一般的には
プログラムは簡単ではありません。そして、誰かがこの作品を読んだ後、記述された枠組みの中で槍を折ることはありません、すなわち、この私のものを使用する場合。
私の少ない、しかし実践的な経験を活かして、誰かが時間を無駄にすることなく動いてくれれば、何かうまくいくかもしれません。そうすれば、苦しんでいるすべての人たちが
(私も含めて)チップで作者の記念碑を建てることになるでしょう。:)
 
OK、夕方には(約束通り)1つの機能を作るよ、すべてがクリアになるんだ。今のところ、テスターをきちんと開発すれば、次のようなことが可能になるというのが私の考えです。
を使用して、ネイティブのExpert Advisorを若干の外観上の変更で使用することができます。最初の「犠牲者」は、MACD_sample.mq4 。
 
Rosh,<br / translate="no">ゴミは消せないのでしょうか?
見るに耐えない。
ロシア語のテキストを含むスクリプトをコピーする際に、フォーラム、ホスティング、MTの不具合が発生するのでしょう。


"Garbage "を削除しました。プログラマーは、(コメントを)書くことがいかにつまらないか知っているのでしょう :) 。

これらの定数は、規格に基づき正しく定義されているか、どなたかご存知ですか?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


特定の値を意味する。

 
私は間抜けだ、なぜ車輪を再発明するのか。シンプルに考えましょう。

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


ただ、コンパイラの反応が事前にわからないのですが、インジケータ本体のトレード定数を 通すのか、通さないのか?
ほとんどの場合、そうでしょう。

理由: