[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 317

 
gyfto:

この式を簡略化するにはどうしたらよいでしょうか?

はMetaQuotesのADXアルゴリズムによるものです。MetaQuotes自身はこの表現を使っています。

- どうシンプルにするか?


なぜ、最もシンプルな選択肢が自分に合わないのか?

z=0;
if(y>x && y>0) z=y;
 
Roger:


なぜ、一番シンプルな選択肢ではダメなのか?


時には、問題を別の角度から見てみることも必要なのでしょう。そうですね、ありがとうございます。
 
gyfto:

hoz, どうすればさらにifを短くできるか考えていました。参照:変数を置くと

は、cnt=cnt+step となり、ここで

しかし、1=cnt/cnt、a -cnt=cnt/(-1)、分母が違うだけです。ここで、x^0=1, x^1=x、つまり、ブール変数_ifを指数に置くことができることを思い出してください、つまり、step=cnt/a*(cnt^_if);ここで

しかし、±aは本来2*_if-1、つまり。

あるいは、以下のように単純化します。


いやあ、シンプルになりましたね。あなたの理屈は理解できない。
 
もしやと思いましたが...。:-)))
 
zoritch:
もしやと思いましたが...。:-)))

何もわかっていないことも理解できた。あのわけのわからないアイコンでさえも...。:)
 
hoz:

1つの符号のバーは上昇している、すなわち強気である。

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

現時点で想定されるメイントレンドの転送を担うこの関数にトレンド パラメータを渡すと、そのパラメータを元に計算するようにするにはどうしたらよいでしょうか。

つまり、trend==down であればループ内の関数は今のようになり、trend==up であればループ内のOpen[i]Close[i] を入れ替えて、条件を満たすようにしました。その場合、バーの終値は始値より低くなり、その差はマイナスとなります。

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((2*trend-1)*(Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if ((2*trend-1)*(Close[i] - Open[i]) < i_sizeOfSequentialCorrectionBar * pt)    // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

あるいは、さらに単純化すると

int LastCandlesType(bool trend)//trend равен 1 (бычий) или 0 (медвежий)
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      bool _if=((2*trend-1)*(Close[i] - Open[i])>=i_sizeOfSequentialCorrectionBar * pt); cnt=cnt+cnt/((2*_if-1)*MathPow(cnt, _if));
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Δは差、すなわちClose[i]-Open[i]、^はべき乗記号 です。const - この式における定数, すなわちi_sizeOfSequentialCorrectionBar * pt, 標準的な数学表記法,私は何も発明していない2*bVar-1は±1と同様 で、ここでのbVarは任意のbool-variableである。また、式2*bVar-1は0と1ではなく、-1と+1の値をとります。≥はMQL4の>=で、これも標準的な数学表記 です。stepはステップで、例えばcnt++ではステップは1、cnt=0ではステップは-cnt です。 他に表記で不明だった点はありますか?

 
ログの作成方法がわからないのですが、MT4で無料ログを自動削除する(または全く作成しない)にはどうしたらよいでしょうか?5桁の証券会社が数社あり、この1日のログが恐ろしいほど大きくなり(1.6gb)、vpsの 容量が限られているのだそうです。ありがとうございました。
 
M2012K:
MT4で無料ログを自動削除させる(あるいは全く作成しない)にはどうしたらよいでしょうか?5桁の証券会社を利用しているのですが、ログが1日で1.6GBも増えてしまい、VPSに載せる場所が限られています。ありがとうございました。

自分でできる

図書館1図書館2

==============

ただし、最後に(現在)開いているファイルは、端末で開きます。削除するのは簡単ではありません。ただし、最初に書かれている内容は削除することができます。

ログの作成は無効化されません。

==============

1.filesフォルダー内のlogsフォルダーにシンボリックリンク(library1)を作成します。

2.MQL4ツールで不要なファイルを削除します。

MQL4で現在のファイルを開く。必要に応じて編集してください。

4.ファイルを閉じます。

5.リンクを削除することができます。する必要はありません。後で便利ですよ。

==============

また、スクリプトファイル(BAT)を作成し、Expert Advisorで実行することも可能です。スクリプトは上記と同じです。リンクを作成しない場合のみ。Windowsのツールを使って、ファイルを扱うのはもちろん。

 
M2012K:

フリーログを自動的に削除する(あるいは全く作成しない)方法はどのようにアドバイスすればよいでしょうか。

というのも、5桁のDCでは、このログが1日に1.6gbというとんでもないサイズになり、vpsの容量が限られてしまうからです。ありがとうございました。

ログって何?

エラーは何ですか?

 

こんにちは!プリミティブロボットの改良を手伝ってほしいのですが。まず始めに、どこにどんな目的で助けが必要なのかを明確にするために、私の簡単な戦略を説明します。

TSの真髄。

1.建値が MAより低く、終値が高ければ買う。

2.始値がMAより高く、終値が安ければ、売るべきでしょう。

最も有利な価格からX%動いたら、注文を終了する。これはトレーリングストップに似ていますが、ピップスではなく、注文の開始距離とベストプライスのX%です。写真にある通りです。

AB - 注文開始から最も有利な価格までの距離; BC = ABのX%; C - 注文終了。

項目1と2は、私がプログラムに書きました。

extern int period=50;
extern int ma_shift=0;
extern int Magic=666;
extern double lot=0.1;
extern int SL=150;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int kolpos=0;
  double ma=iMA (NULL,0,period,ma_shift,MODE_SMMA,PRICE_MEDIAN,0);
//----
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect (pos, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
   kolpos++;
   }
   if (kolpos==0)
   {
 
   if(Open[1]>ma && Close[1]<ma)  
   OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+SL*Point,0,NULL,Magic,0,Red);
   if(Open[1]<ma && Close[1]>ma)  
   OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-SL*Point,0,NULL,Magic,0,Green);
   
   }
   
   
  
//----
   return(0);
  }

一般的に、私のTS(ポイント3)のための注文を閉じる関数を書き、既存のコードを関数に適合させることを助けて欲しい。

P.S.あと、TSが良くないのは分かっています。

理由: