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

 

Osmaを例にとりましたが、Strategy Testerではチャートが動いているときに現在を表示し、チャートに置いただけでは何も表示されません。

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property   indicator_color1  Silver
#property   indicator_width1  2
//---- indicator parameters

extern int Per=12;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     OsmaBuffer1[];
double     OsmaBuffer[];
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,SignalSMA);
   IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,OsmaBuffer1);
   SetIndexBuffer(1,OsmaBuffer);
   SetIndexBuffer(2,MacdBuffer);
   SetIndexBuffer(3,SignalBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
  {
   
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   for(i=0; i<limit; i++)
    {
     for(int b=0; b<Per; b++)
      {
       OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
      }
    } 
  return(0);
  }
Всё разобрался, перемудрил просто))), достаточно этого:
for(i=0; i<limit; i++)
    {
     OsmaBuffer1[i] = OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,i)];
    } 
 
borilunad:
それ、わかります!しかし、この変数(「指定スプレッド」)をどのようにプログラムすればよいのでしょうか。確かに、Spreadという変数を作って、テスターでスプレッドを変更するたびにそれを変更することはできます。Spread(TestGenerator)とか、何か関数があるとか、どうにかしてそういう関数を作れないか、とか言って!(笑)А?


テスト時のスプレッドは決まっています。

が、多くのDCでは可変です。必要であれば、テスターで考慮してください。一般的に、Expert Advisors は最も好ましくない条件でテストします。I.e.最大スプレッド、注文開始の遅延の可能性など。

 
Sepulca:


テスト時には、所定のスプレッドがあります。

が、多くのDCでは可変です。必要であれば、テスターで考慮してください。一般的に、Expert Advisorは最も不利な条件でテストします。I.e.最大スプレッド、注文開始の遅延の可能性など。

何でも理解して、何でもやる!ただ、テスターではAskがよく歪むので、プログで設定したスプレッドを反映させ、Bid+spreadで探したいと思っています。テスターでMarketInfoが動作 しないブランチを参照してください。そうすれば、何が問題なのかがわかるはずですそこで聞いても、誰もいない!したがって、ここに移動し、そこに反応し、あなたや他の人があなたに感謝するために
 
同僚!既成の関数をEAに組み込むのを手伝ってください。
 

以下はその機能です。

bool isFlagHistoryPos(int mn=-1){ フラグを立てる。

datetime t;

int gd = MarketInfo(Symbol(),MODE_DIGITS)。

int i, j=-1, k=OrdersHistoryTotal()です。

for (i=0; i<k; i++) {.

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){

if (OrderSymbol()==Symbol()){

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {。

if (mn<0 || OrderMagicNumber()==mn) {.

if (t<OrderCloseTime()){

t=OrderCloseTime()。

j=iとする。

}

}

}

}

}

}

if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)){

double ocp=NormalizeDouble(OrderClosePrice(),gd);

double otp=NormalizeDouble(OrderTakeProfit(),gd);

if(MathAbs(ocp-otp)/Point<=TPpoint) return(true)とする。

}

return(false)です。

Expert Advisor本体を添付します。

/* Vininによるデコンパイル */

 
borilunad:
はい、すべて理解し、実行していますただ、テスターではAskがよく歪むので、設定したスプレッドをプログに反映させ、Bid+spreadで探したいと思っています。テスターでMarketInfoが動作 しないブランチを参照してください。そうすれば、何が問題なのかがわかるはずですそこで聞いても、誰もいない!したがって、ここに移動し、そこに反応し、あなたや他の人があなたに感謝するために

クソ ボリス以前にも書きました。エキスパートアドバイザーでフローティングスプレッドの真似をすることができるんだ。フローティングスプレッドの範囲内のランダムな数値をビッドに追加し、ストップオーダーで開くことを妨げるものは何ですか?そして、ストップオーダーではなく、値で閉じる。静止画のスプレッドを大きく設定するよりも複雑ですが、どうしても必要な場合は、それを行うことができます。同時にテスターで最小のスプレッドを設定します。

ただ、それは...一筋縄ではいかない

 
artmedia70:

クソ ボリス以前にも書きました。さて、EAでフローティングスプレッドのシミュレーションをしましょう。浮動スプレッド範囲のランダムな数値をビッドに追加してストップオーダーで開くのはどうなんだろう。そして、ストップオーダーではなく、値で閉じる。静止画のスプレッドを大きく設定するよりも複雑ですが、どうしても必要な場合は、それを行うことができます。同時に、テスターで、最小スプレッドを設定する。

これはまさに ...考え方です。

アルテムさん、ありがとうございます!いい意味で賢くなっていますね。そうします!
 

Help with the problem, please) 交差波で動作するExpert Advisorを書いた のですが、テストしようとするとターミナルがビープ音を出して何もテストしません(コンパイラコードは気に入っています。 せめて何か表示するようにするにはどうすればいいでしょうか?

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int RPeriod=13;
extern int RPrice=PRICE_CLOSE;
extern int RMethod=MODE_EMA;
//для желтой
extern int YPeriod=30;
extern int YPrice=PRICE_CLOSE;
extern int YMethod=MODE_EMA;
extern int Magic=17051994;
//профит и лось
extern int TakeProfit=150;
extern int StopLoss=30;
extern double lot=0.1;
double movingred,movingellow,SL,TP,movingred2,movingellow2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int kolpos=0,pos;  
     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
         
        for(pos=0;pos <OrdersTotal();pos++)//считаю ордера чтобы советник не трогал в ручную выставленные ордера
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
            {
            kolpos++;
            }
        }
        if (kolpos==0)
         {
              //условвие для покупок продаж
              if(movingred2>movingellow2 && movingred<movingellow && Volume[0]<5)//продаем 
                  {
                    OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,Magic,0,Green);
                  }
              if(movingred2<movingellow2 && movingred>movingellow && Volume[0]<5)//покупаем
                  {
                    OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-StopLoss*Point,Ask-TakeProfit*Point,NULL,Magic,0,Red);
                  }
          }
   return(0);
  }
 
LBatters:

Help with the problem, please) 交差波で動作するExpert Advisorを書いたのですが、テストしようとするとターミナルがビープ音を出して何もテストしません(コンパイラコードは気に入っています。 せめて何か表示するようにするにはどうすればいいでしょうか?

自分が書いたものを見たことがあるのか!?

何か、「ここが問題なんだ」と思うんです。

     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
 
LBatters:

問題で助けてください)私は手を振って交差に動作するエキスパート-アドバイザーを書いたが、私はそれをテストしようとすると、端末がビープ音と何もテストしません(コンパイラのコードが好きです。 彼は少なくとも何かを表示するようにそれを作るにはどうすればよいですか?

//считаю ордера чтобы советник не трогал в ручную выставленные ордера

どこを触るんだろう?はい、そしてそれは、マジシャン、マジシャンなしのマニュアルをチェックするのに十分です。


しかも、上に書いたように、マッシュが重ならないように...。