[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 403

 
ruslanchik:
スタックサイズの計算方法を教えてください。

もっと具体的に質問してください。
 

最適化で不要なステップをスキップして、次のステップに進むことは可能でしょうか?

例:最適化が必要な入力パラメータ(double型):x1、x2、x3、x4があり、その値は1〜5です。 ステップ0.1

この場合、41*41*41=2,825,761となることは明らかである。

しかし、10.5 < x1+x2+x3+x4 < 11.5 という制約の中で検索する必要があります。ここですでに、検索のバリエーションが少なくなることが明らかです。(金輪際、必要ない)

そこで、この制限をExpert Advisorのコードに次のように追加すると、このようになります。

extern double    x1=1, x2=1, x3=1, x4=1;

int start()

{

  if (10.5<x1+x2+x3+x4 && x1+x2+x3+x4<11.5)

    {
      // основной код эксперта 

    }
  return; 

} 

そして、最適化の間(新しいティックが来るたびに)、例えばx1=4, x2=4, x3=4, x4=4 のような不適当なバリエーションも取られるでしょう。

つまり、この最適化ステップが履歴区間を「走り抜ける」ことがない限り、次のステップへの移行はありません。1 0.5 < x1+x2+x3+x4 < 11.5 という条件が成立していないという「確信 」が生まれ、メインコードの実行が停止するだけである

このような明らかに不向きなバリアントでは、時間が大きく浪費されます。

明らかに不適切なパラメータを用いた最適化において、そのようなステップを除外するにはどうすればよいのでしょうか。

つまり、別のパラメータセットが不適当になったとき、なぜこのステップを最適化せず、すぐに次のステップに移行する必要があるのでしょうか?

 
fmql:

最適化で不要なステップをスキップして、次のステップに進むことは可能でしょうか?


3つのパラメータを最適化し、4つ目のパラメータを希望する量に調整することが可能です。

または、3番目のタブ「最適化」を使って、必要なイベントを自発的に生成します。

 
sergeev:

3つのパラメータを最適化し、4つ目のパラメータを必要量に調整することが可能です。

または、3番目のタブ「最適化」を使って、希望するイベントを自発的に生成します。

要は、私の場合、4番目のパラメータを無視して3つのパラメータを最適化することは不可能なのです。

ここでは、その共同選択が重要であり、その和は区間内に限定される。

(混合物の全成分の分数探索とほぼ同じで、この混合物の全質量は厳密な間隔に制限される)

3つ目のタブについて、詳しく教えてください。この自発的なイベントの生成とは何ですか?

 

こんにちは。

ZigZagインジケータの最後の極限のローソク足の値(High, Low, Open, Close)を抽出する方法を教えてください。

 
他のキャンドルと同じです。同じ機能です。( 惑星の直径を考える(c) )
 
最後の極値そのものの小節番号を取得したい場合は、最後のレイのオブジェクト名を使って、最初の座標の時刻を取得 すると、小節の時刻に対応することになります。バータイムを使って、バーナンバーを決定する。バーナンバーからバーの特性を判断する。
 
fmql:

3つ目のタブ、目的の事象の自発的な発生について、詳しく教えてください。


詳しくはヘルプをご覧ください

簡単に説明すると、3番目のタブにあるポイントに対して独自の条件(例えば、負け注文を10回連続で出すなど)を作成すると、テスターは自動的にこの実行をスキップして次の実行に移ることができます。

 
Stells:

こんにちは。

ZigZagインジケーターの最後の極限のローソク足の値(High, Low, Open, Close)を抽出する方法を教えてください。


このような操作には、いくつかの計算が必要です。

以前はこんな風にやっていました。

int start()
  {
 double // экстремумы Зиг-Зага
  y3=0, 
   y2=0,
    y1=0,
     y0,
     zz;   
 int    x3, x2, x1, sh=ShiftBars;// номера баров  

  y0=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, 1);

//=============================================================================
  // Берём три экстремума Зиг-Зага
   while (y3==0) 
      {
      zz=iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, sh);
      if (zz!=0 && zz!=EMPTY_VALUE) 
         {
         if      (y1==0) { x1=sh; y1=zz; }
         else if (y2==0) { x2=sh; y2=zz; }
         else if (y3==0) { x3=sh; y3=zz; }
         }
      sh++;

//----- Вывод информации на экран -----------------------------------------------
string info="";
string on_off="---------------------------------------------------"+  "\r\n";

on_off=StringConcatenate (on_off,"Экстремум= ",y1," на ",x1," баре","\r\n");
on_off=StringConcatenate (on_off,"Экстремум= ",y2," на ",x2," баре","\r\n");
info=StringConcatenate(info,on_off,"\r\n");
info=StringConcatenate(info,"\r\n");
Comment(info);    

これで、直近の2つの極値(最小値と最大値)のバー番号と、その高値、安値がわかりましたね。 見つけやすい

- Close[x1]、Open[x2]、・・・。など

もしかしたら、もっとシンプルな方法を提案してくれる人がいるかもしれません。

 
ループが組めない、XとYは常に0。
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X,Y; double price=(Ask+Bid)/2;            
//----
       Alert ("OrdersTotal()",OrdersTotal());

if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000){
 for(int i=OrdersTotal();i==0;i--){
OrderSelect(i,SELECT_BY_POS );if(OrderType( )==OP_BUYSTOP){X++;}}}Alert ("X", X);
if (X==0){


   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, price+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); }
   
if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()) { 
  for( i=OrdersTotal();i==0;i--){OrderSelect(i,SELECT_BY_POS );
if(OrderType( ) ==OP_SELLSTOP) { Y++;}}}Alert ("Y", Y);
 if (Y==0){ 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, price-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+