どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 573

 
Expert Advisorにフラクタルを検出させる方法を教えてください。
 
skyjet:
こんにちは!Expert Advisorにフラクタルを検出するようにする方法を教えていただけませんか?

もっと詳しく知りたい。フラクタルを描いたり見つけたりできる指標はいろいろある。Expert Advisorはそれらを検出する必要はありません。インジケータを手に取り、そのバッファからあるフラクタルの値をコピーするのです。注意すれば複雑なことは何もない。
 

ごきげんよう。この問題についてアドバイスください。Strategy Testerでは、Expは後続の平均のチャンネルのサイズを増加させるアルゴリズムとスキームに従って注文を開き、画像で見ることができます。しかし、同時に、プリンターは、平均化が行われるべきでないような表現の値を生成します。なぜなら、その表現が開くための条件が満たされていないからです。 この状態で、どうやってポジションを開くのか、まったくわからない。すべてをブラケットで囲むことにしたが、どうにもならない。

オープニング価格に関するテスト。以下はそのコードと画像です。

...
// Внешние переменные (оптимизируются)
extern string A1 = " Параметры ММ ";
extern double Lots = 0.02;         // Стартовый лот

//-------------------                                  
extern double LotExponent = 2.7;  // на сколько умножать стартовый лот в степени - схема по Илану                                   

extern string A2 = " В настоящих пипсах ";
extern int StopLossPips_BUY = 100;   // уровень стартового усреднения в бай  объёма позиции в пипсах 


// Увеличение шага усреднений по схеме

extern double PipStepExponent_BUY  = 1.3; // на сколько умножать стартовый шаг в степени 

//-----------------------------------------------------------------------

.....

// если стартовая открыта и достигнут уровень усреднения, то усреднить на  Lots * MathPow(LotExponent,NumberOfPositions(Symbol(), -1, MN_L));  
    if (NumberOfPositions(Symbol(), -1, MN_L)>=1 && 
       GetProfitOpenPosInCurrency(Symbol(), -1, MN_L)<0)   
      // if (MathAbs (GetProfitOpenPosInPoint(Symbol(), -1, MN_L)) > StopLossPips)  
          {
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                     {WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                      Print (" первое усреднение ");
                     }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                          NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                       Print (" последующие, если это больше ", NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                              " этого, то открыть бай ", NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0));
                     }
                    }
                 }   
                     
              
           if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_SELL) 
               if ((PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))<0)
               
                  if (NumberOfPositions(Symbol(), -1, MN_L)==1)
                     {
                      if (NormalizeDouble((MathAbs(PriceOpenLastPos(Symbol(), OP_SELL, MN_L)-MarketInfo(OrderSymbol(), MODE_ASK))/Point),0)>StopLossPips_SELL)           
                      WmOrderSend(Symbol(), OP_SELL,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_SELL,MN_L))),Bid, 0, TP_START_SELL, " усреднение вниз ", MN_L);         
                     }
                     
          }           
.....

 
skyjet:
Expert Advisorにフラクタルを検出させる方法を教えてください。

ナビゲーター 参照。これくらい なら、こんなもんだろう。
 
Roman.:

ごきげんよう。この問題についてアドバイスください。Strategy Testerでは、Expは後続の平均のチャンネルのサイズを増加させるアルゴリズムとスキームに従って注文を開き、画像で見ることができます。しかし、同時に、プリンタは、2856、2197、1690よりも、そのオープンのための条件25が満たされていないため、平均化が行われるべきではないような表現の値を生成する。 この状態で、どうやってポジションを開くのか、まったくわからない。すべてを中括弧で囲むことにしたが、何の役にも立たない。

オープニング価格に関するテスト。以下はそのコードと画像です。


私の理解では、すべてのコードを見て、ここで仕組みを学ばないと、誰も教えてくれないと思われます。このブロックで使われている関数は、すべてあなただけが知っているものです。すべて印刷しながら、メッセージの出力を確認しながら進めるとよいでしょう。
 
hoz:

私の理解では、すべてのコードを見て、ここで仕組みを学ばないと、誰も教えてくれないと思います。このブロックで使われている関数は、すべてあなただけが知っているものです。メッセージの出力を見ながら、すべてを印刷するのがベストです。

すべての機能が正常に動作する-これが金IVの機能です。「金IVの便利な機能だけ」機能の名前から、その目的は明らかです。
 

私はそれを理解した - すべてが正常に動作しています。ポジションを開く 前に印刷されるべきでした。

 if (GetTypeLastOpenPos(Symbol(), MN_L)==OP_BUY) 
              if (MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L)<0) // надо ли усреднять
                {
                 if (NumberOfPositions(Symbol(), -1, MN_L)==1) 
                    {// при первом усреднении, усреднять через стартовое количество пунктов - StopLossPips_BUY
                     if ( NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0)>StopLossPips_BUY)                 
                        {
                         Print (" первое усреднение ",NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),
                                " StopLossPips_BUY = ",StopLossPips_BUY, " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits), "P = ", DoubleToStr(Point,Digits));                 
                         WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " первое усреднение вверх ", MN_L);
                        }
                    } 
                 if (NumberOfPositions(Symbol(), -1, MN_L)>1) // при последующих - усреднять через  MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))  
                    {
                     if (NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0) > 
                         NormalizeDouble((StopLossPips_BUY* MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1)),0))                                           
                     {
                        Print (" последующие, если это больше ", DoubleToStr(NormalizeDouble((MathAbs(MarketInfo(OrderSymbol(), MODE_BID)-PriceOpenLastPos(Symbol(), OP_BUY, MN_L))/Point),0),Digits),
                              " этого, то открыть бай ", DoubleToStr(NormalizeDouble(StopLossPips_BUY*MathPow(PipStepExponent_BUY,NumberOfPositions(Symbol(),OP_BUY,MN_L)-1),0),Digits),
                              " MODE_BID = ", DoubleToStr(MarketInfo(OrderSymbol(), MODE_BID),Digits), " PriceOpenLastPos = ", DoubleToStr(PriceOpenLastPos(Symbol(), OP_BUY, MN_L),Digits));
                       WmOrderSend(Symbol(), OP_BUY,  NormalizeLots(Lots*MathPow(LotExponent,NumberOfPositions(Symbol(),OP_BUY,MN_L))), Ask, 0, TP_START_BUY, " усреднение вверх ", MN_L);          
                                           }
                    }
                 }   
           

平均化ポジションはアルゴリズムに従って開かれ、PriceOpenLastPos(Symbol(),OP_BUY, MN_L) 関数は今開いたポジションの値を返しました、それが私が疑問を持った理由です。

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

 

Roman、うまくいってよかったですね :)そしてまた、とても速い。

基本的に、私のコンパイラは再び悪態をつくようになりました。その中にクラスを使用するライブラリがあります。もちろんライブラリに収録されています。

#include <HOZ_Code\Classes\CLogging.mqh>

CLogging logging;

CLogging.mqhクラスを使用したこのライブラリをコンパイルする際、コンパイラはこのように悪態をつく。

'#property' - name expected     CLogging.mqh    6       1

この行のクラスで。

これは何を意味するのでしょうか?

 
スクリプトで取引レベルの表示を 有効/無効にするにはどうしたらいいですか?
 

助けてーーーーーーーーーーーーーーーーーーーー

公開フォーラムのEAで、トレードのエントリー条件に3バー・パターンを付けました。

最適化とテスト(3年半)の後、私は1つのデモ口座に10個のウィンドウをインストールし、それぞれに個別の設定を行った結果、フクロウの取引スピードは1日あたり少なくとも1.5個となりました。私のサーバー上の10台の仮想コンピューターで、それぞれ1ウィンドウずつ、同じ速度が確保されています。

一週間が過ぎたが、どこにも一件の取り決めもない。

どうすればいいのか?

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

int GetSignal()
{
double LevelADX = iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0);
double Delta_01_ADX =(iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,0)
- iADX(NULL,TF_ADX,PeriodADX,4,MODE_MAIN,2));
double mas,maf;
mas=iMA(NULL,TF_MA,Slow.Delta); double maf=(null,TF_ADX,periodADX,4,MODE_MAIN,2); double maf=(null,TF_ADX,4,MODE_MAIN,1)period,0,Slow.metod,Slow.price,1);
maf=iMA(NULL,TF_MA,Fast.period,0,Fast.metod,Fast.price,1);
//------------------
double delta1,delta2;

delta1=NormalizeDouble((Close[1]-Close[2])/Point,5);
delta2=NormalizeDouble((Close[2]-Close[3])/Point,5);

double body3=NormalizeDouble((Open[3]-Close[3])/Point,5)。
//------------------
int STsig=-1;
if(CrossLevel && Lines>0) {
int up,dw;
int up_l,dw_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][0]<LevelDw) dw++; else{
if(ST[jj][0]>)LevelUp) up++;
}
if(ST[jj][1]<LevelDw) dw_l++; else{
if(ST[jj][1]>LevelUp) up_l++;
}
}
if(up<=8-Lines && up_l>8-Lines) STsig=1;
if(dw<=8-Lines && dw_l>8-Lines) STsig=0.を満たす。
}
if(STsig==-1 && BreakSweep) {
double big,small;
double big_l,small_l;
for(jj=0;jj<8;jj++) {
if(ST[jj][1]>big_l) big_l=ST[jj][1];
if(ST[jj][1]<small_l || small_l=0) small_l=ST[jj][1];
} }.
if(big_l-small_l<=Sweep && (small_l>=LevelUp || big_l<=LevelDw)){
for(jj=0;jj<8;jj++) {
if(ST[jj][0]>big) big=ST[jj][0];
if(ST[jj][0]<small || small==0) small=ST[jj][0];
}.
if(大-小>スイープ)

{

//--------------- 私のボリューム [] とオープン [] とクローズ [] アドオン --------------------------------。

if(Close[1]>Close[2]&& Close[2]>Close[3]&& Close[3]<Open[3] && Close[2]>High[3]
&&)body3>=Body3 && delta1>=Delta1 && delta2>Delta2 && big_l<=LevelDw && maf>mas)
STsig=0;

if(Close[1]<Close[2]&& Close[2]<Close[3]&& Close[3]>Open[3] && Close[2]<Low[3]
&& body3>.=Body3 && delta1>=Delta1 && delta2>Delta2 && small_l>=LevelUp && maf<mas)
STsig=1;
}.

}

}

if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==0) return(OP_BUY)とする。

if(Volume[0]<2 && Volume[1]>Volume1 && Volume[2]>Volume2
&& Delta_01_ADX > DeltaADX && LevelADX < StopADX && STsig==1) return(OP_SELL);
return(-1);

}

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

ありがとうございました。