mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 15

 
Vict:

複雑にしすぎました ))。

だから、最初のものを使わせてください、それが一番いい方法でしょう。

TESTは何度か書いても問題ないです。

これも可能ですが、すべてが呼び出される順番が逆になるだけです。

#define  LINE(dId) EA.AddDealsSettings(InDealType_##dId,InVolType_##dId,InVolume_##dId,InPrice_##dId,InVolCoeff_##dId,InClosePips_##dId,Mirror)

#define  BLOCK1 LINE(01)
#define  BLOCK2 LINE(02); BLOCK1
#define  BLOCK3 LINE(03); BLOCK2
#define  BLOCK4 LINE(04); BLOCK3
#define  BLOCK5 LINE(05); BLOCK4
#define  BLOCK6 LINE(06); BLOCK5
#define  BLOCK7 LINE(07); BLOCK6
#define  BLOCK8 LINE(08); BLOCK7
#define  BLOCK9 LINE(09); BLOCK8
#define  BLOCK10 LINE(10); BLOCK9

#define  SEND(dCount) do {BLOCK##dCount;} while(false)

void OnStart()
  {
   SEND(10);
  }
 

うーん、キーボードを叩く回数を減らして楽にしようと思ったんだけど、今度は例題を全部処理しないといけないか

ウラジーミル・シマコフ さん、かっこいいですね。

Vict さん、ありがとうございます。

ZS: 正直、マクロは最初の例だけで、あとは全然わかりません((

 
Igor Makanu:

うーん、キーボードを叩く回数を減らして楽にしようと思ったんだけど、今度は例題を全部処理しないといけないか

ウラジーミル・シマコフ さん、かっこいいですね。

Vict さん、ありがとうございます。

ZS: 正直、最初のマクロの例だけ理解できて、あとはさっぱりです((

プリプロセッサのマジックが呼び出される))

 
Vladimir Simakov:

プリプロセッサのマジックが呼び出されます)))

そうなんですよね、練習をしたことがないからなかなか身につかないんですよね((

このコードをマクロにすることはできますか?


//--- input parameters
input ENUM_DEALTYPE        InDealType_01=BUY;            //1.------------------------------ Order ------------------------------
input int                  InPrice_01        =  000;     //Start price
input double               InVolume_01       =  0.01;    //Start Volume
input ENUM_VOLUMERATIO     InVolType_01=MultiplyAlways;  //Next operation with volume coefficient
input double               InVolCoeff_01     =  1.5;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_01     =  NotMove; //Next price type
input double               InDistCoeff_01    =  1.23;    //Coefficient next open price
input int                  InDistShift_01    =  150;     //Shift next open price
input int                  InClosePips_01    =  200;     //TakeProfit>0 or StopLoss<0

input ENUM_DEALTYPE        InDealType_02=BUY;            //2.------------------------------ Order ------------------------------
input int                  InPrice_02        =  000;     //Start price
input double               InVolume_02       =  0.01;    //Start Volume
input ENUM_VOLUMERATIO     InVolType_02=MultiplyAlways;  //Next operation with volume coefficient
input double               InVolCoeff_02     =  1.5;     //Volume coefficient
input ENUM_DISTANCERATIO   InDistType_02     =  NotMove; //Next price type
input double               InDistCoeff_02    =  1.23;    //Coefficient next open price
input int                  InDistShift_02    =  150;     //Shift next open price
input int                  InClosePips_02    =  200;     //TakeProfit>0 or StopLoss<0

それで10回ですか。

まだ8回残ってるのに・・・。しかし、オプティマイザで実行したときに、もしかしたらパラメータを追加したり削除したりするかもしれないので、まだコードを確定していません(コメントは同じですが、1行目の桁が違います)。

 
Igor Makanu:

そうなんですよね、練習をしたことがないからなかなか身につかないんですよね((

このコードはマクロで包むことができますか?


で、10回? で、コメントは同じですが、一桁が違うんです

はい、問題ありませんが、コメントだけはご遠慮ください。はい、そしてそれらを /* ... で置き換えてください。*/ この場合、コンパイラは、設定テーブルの外部変数のテキスト記述のコンテキストでそれを受け入れなくなります。確認しました。

 
Vladimir Simakov:

はい、問題ありませんが、コメントだけはご遠慮ください。はい、そしてそれらを /* ... で置き換えてください。*/ この場合、コンパイラは、設定テーブルの外部変数のテキスト記述のコンテキストで、これを受け入れなくなります。確認しました。

となると、コメントを手作業で修正しなければならないのが問題ですね...。テストにはいいんだけど、とにかく早い、自分のコードを編集していると、編集に時間がかかる、テスターに手が届かない...。

差し支えなければ、コメントなしの例を作ってください。



PS:もしかしたら、このアイデアはくだらないかもしれませんが、朝から頭の中で「こんなのがあったらいいな...」と考えています。今のところオプティマイザに注文のグリッドが、最終目標は異なっている(代わりにいくつかの固定グリッドステップの、私はオプティマイザは、おそらく同じ、係数を実行するように多項式を添付したいが、私はテイラーの行を見てみたい ;) )、しかしグリッドはまず私は、一般的にはテストポリゴン 私は準備))を示し、最適化するかを参照する必要があります。)

 
Igor Makanu:

そうなんですよね、練習をしたことがないからなかなか身につかないんですよね((

このコードをマクロにすることはできますか?


それで10回ですか。

まだ8回残ってるのに・・・。しかし、オプティマイザで実行するときに、もしかしたらパラメータを追加したり削除したりするかもしれないので、まだコードを書いていないのです(コメントは同じですが、一桁目が違います - 最初の行)。

このコードを生成する(そしてファイルやクリップボードに保存する)小さな関数を書くことができます。

 
Andrey Khatimlianskii:

このコードを生成する(そしてファイルやクリップボードに保存する)小さな関数を書くことができます。

まあ、詩的な精神はすべて破壊する、散文では難しいことではない、そういうことだ。

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#include <Files\FileTxt.mqh>
CFileTxt FOut;

#define   COUNT 10


const string code0[]=
  {
   "input ENUM_DEALTYPE        InDealType_","=BUY;            //",".------------------------------ Order ------------------------------"
  };

const string code1[]=
  {
   "input int                  InPrice_","        =  000;     //Start price",
   "input double               InVolume_","       =  0.01;    //Start Volume",
   "input ENUM_VOLUMERATIO     InVolType_","=MultiplyAlways;  //Next operation with volume coefficient",
   "input double               InVolCoeff_","     =  1.5;     //Volume coefficient",
   "input ENUM_DISTANCERATIO   InDistType_","     =  NotMove; //Next price type",
   "input double               InDistCoeff_","    =  1.23;    //Coefficient next open price",
   "input int                  InDistShift_","    =  150;     //Shift next open price",
   "input int                  InClosePips_","    =  200;     //TakeProfit>0 or StopLoss<0"
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   if(FOut.Open(__FILE__+".txt",FILE_WRITE|FILE_COMMON)!=INVALID_HANDLE)
     {
      for(int i=0;i<COUNT;i++)
        {
         string N=IntegerToString(i,2,'0');
         FOut.WriteString(code0[0]+N+code0[1]+IntegerToString(i)+code0[2]+"\n");
         for(int j=0;j<8;j++)
           {
            FOut.WriteString(code1[j*2]+N+code1[j*2+1]+"\n");
           }
        }
      printf("Write to file %s",FOut.FileName());
     }
   else printf("Open file error № %i",GetLastError());
  }
//+------------------------------------------------------------------+

))))

でも、とにかくアドバイスありがとうございました

 
Vladimir Simakov:

はい、問題ありませんが、コメントだけはご遠慮ください。はい、そしてそれらを /* ... で置き換えてください。*/ この場合、コンパイラは、設定テーブルの外部変数のテキスト記述のコンテキストでそれを受け入れなくなります。確認しました。

何か悪いことをしたのでは?それともマクロの動作が違うのでしょうか?

input double d1=1.02,/*Первая переменная double*/ d2=3;/*Вторая переменная double*/
input double d3=3.07;/*Третья переменная double*/
input int i1=5,/*Первая переменная int*/ i2=7;/*Вторая переменная int*/
 
Alexey Viktorov:

何か悪いことをしたのでしょうか?それともマクロの動作が違うのでしょうか?

そうですね、違いますね。これは、プリプロセッサがパーサより 先に起動して、バカスカ文章を集め、マクロ内のコメントがプリプロセッサの段階で破棄されることと関係がある。同時に、マクロで//を放置しておくと、自分のせいで猛烈なバグが発生する可能性もあります。
理由: