エリオット波動理論に基づくトレーディング戦略 - ページ 139

 
Ivakhnenkoを読み始めました。今のところ、Vladislavのアプローチは、本質的にMSUAのバリエーションであるという印象が強くなっています :)
solandr さん、あなたの粘り強さが実を結んだのですね、お見事です。
 
2ソランドールキャンディッド
面白くなってきた。とにかく、自分の学歴のギャップを埋める必要があることに気づいたのです。
しかし、イバフネンコの著書で電子化されたものは見当たらない。
リンク先を教えてください。
 
MGUAホームページ:http://www.gmdh.net/gmdh.htm
Literature:http://www.gmdh.net/articles/index.html.ここでは、書籍はファイルごとになっています。スパイダーで部品が手に入る。
 
2キャンディ
ありがとうございます。とても興味深いサイトです。
そして、この2冊は電子版では全く存在しないようです。
Ivakhnenko A.G., Yurachkovsky Y.P. 実験データによる複雑系モデリング。- モスクワ:ラジオ・コミュニケーション社、1987年
イワフネンコ A.G. 複雑なシステムのモデリング:情報アプローチ。- K.: Naukova Dumka, 1987, 136p.
 
指標を公開することを決定。インジケーターの説明は、コード自体に記載されています。
追記:2006.09.23にコードを編集しました。

//+------------------------------------------------------------------+
//|                                        AMPLITUDE_STAT_LEVELS.mq4 |
//|                                        Copyright © 2006, Solandr |
//|                                                solandr99@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Solandr"
#property link      "solandr99@mail.ru"
#property indicator_chart_window

// ============================================================================================
//"Купи подешевле, продай подороже" - основа, на которой базируется спекуляция на финансовых рынках. 
//Данный индикатор предлагает своё видение этих уровней "подешевле" и "подороже". Он основан на простом 
//статистическом расчёте размахов (амплитуд High-Low) баров по имеющейся истории котировок.
//Расчёт амплитуд происходит по сериям от 1 до 10 баров. То есть в выбранной серии на истории находитcя разница между 
//максимальным и минимальным значением цены. Далее окно серии смещается на 1 бар и получаем следующий размах амплитуды 
//баров для выбранной серии баров. После усреднения значения полученных размахов мы имеем среднее арифметическое диапазона 
//колебания цены для выбранной серии баров. 
//
//Полученное таким образом значение амплитуды откладывается на графике по следующему принципу. К минимуму текущей серии 
//баров прибавляется значение среднеарифметического размаха, посчитанного на истории. Так мы получаем возможный 
//среднестатистический максимум цены для текущей серии баров. То же самое делаем для нахождения среднестатистического 
//минимума для текущей серии баров. То есть от максимума текущей серии баров отнимаем среднеарифметический размах, 
//посчитанный для данной серии баров по историческим данным. Индикатор производит описанные выше действия для серий 
//от 1 до 10 баров. На уровнях присутствуют надписи, поясняющие для какого текущего временного промежутка построен данный 
//уровень. С параметром TF_needed="AUTO" уровни строятся для серий баров текущего таймфрейма. Если требуется зафиксировать
// уровни какого-то таймфрейма на остальных периодах, то необходимо установить это значение в MN, W1, D1, H4, H1, M30, 
//M15, M5, или в M1. Например для значения TF_needed="D1" на всех периодах будут отображаться уровни для временных 
//промежутков от 1 до 10 дней, обозначаемых соответственно как D1,...,D10.
//
//При настройках по умолчанию индикатор производит перерасчёт среднестатистических амплитуд по истории один раз в день 
//с их внесением в глобальные переменные терминала. Если по какой-то причине (например импортирование дополнительных 
//котировок) требуется произвести перерасчёт среднеарифметических значений амплитуд для серий баров не дожидаясь 
//следующего дня, то необходимо установить TF_needed в значения force_recalculation=true и будет произведён перерасчёт 
//среднеарифметических значений размахов для серий баров при следующей инициализации индикатора.
//
//Данный индикатор может быть полезен при принятии решений о входе в позицию. Может поспособствовать сохранению депозита
//особенно начинающих трейдеров. Продавайте на красных уровнях и покупайте на зелёных и за Вас будет играть математика! ;o))) 
//Если Вы например купили на зелёных уровнях и курс пошёл резко против Вас, то убыточную позицию есть смысл удерживать лишь 
//до тех пор пока красные уровни не окажутся ниже Вашей открытой позиции. И когда цена окажется на этих красных уровнях - 
//закройте убыточную позицию с минимальным убытком, а во многих случаях и с маленьким плюсом. Желаю успехов!:o)
// ============================================================================================
extern string TF_needed="AUTO";
extern bool force_recalculation=false;//принудительный перерасчёт

bool recalculation_needed=false;
double delta[11];
string work_symbol;
int TF;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int i,k,all_bars;
   string b_str,global_name;
 
   work_symbol=Symbol();
   
   //Выбор требуемого тайфрейма для расчёта;
   if(TF_needed=="AUTO" || (TF_needed!="MN" && TF_needed!="W1" && TF_needed!="D1" && TF_needed!="H4" && TF_needed!="H1" && TF_needed!="M30" && TF_needed!="M15" && TF_needed!="M5" && TF_needed!="M1")) TF=Period();
   if(TF_needed=="MN") TF=43200;
   if(TF_needed=="W1") TF=10080;
   if(TF_needed=="D1") TF=1440;
   if(TF_needed=="H4") TF=240;
   if(TF_needed=="H1") TF=60;  
   if(TF_needed=="M30") TF=30;  
   if(TF_needed=="M15") TF=15;  
   if(TF_needed=="M5") TF=5;  
   if(TF_needed=="M1") TF=1;  
      
   //Проверяем наличие посчитанных данных амплитуд для данного TF, а также производим проверку дня, в который был произведен расчёт этих данных
   global_name=work_symbol+"_"+TF+"_counted_day";
   if(GlobalVariableCheck(global_name) && !force_recalculation) 
   {  
      if(MathAbs(GlobalVariableGet(global_name)-DayOfYear())>0) recalculation_needed=true;
   }
   else recalculation_needed=true;
         
   if(recalculation_needed)
   {//Производим расчёт средней амплитуды бара (серии баров) по таймфрейму TF на символе work_symbol
      all_bars=iBars(work_symbol,TF);
   
      for(i=1;i<=10;i++) delta[i]=0;
   
      for(i=1;i<=10;i++)
      {      
         for(k=all_bars-i;k>=0;k--) delta[i]=delta[i]+iHigh(work_symbol,TF,Highest(Symbol(),TF,MODE_HIGH,i,k))-iLow(work_symbol,TF,Lowest(Symbol(),TF,MODE_LOW,i,k));
         delta[i]=NormalizeDouble(delta[i]/(all_bars-i+1),Digits);   
         global_name=work_symbol+"_"+TF+"_"+i;
         GlobalVariableSet(global_name,delta[i]); 
         //Print("delta",i,"=",delta[i]);
      } 
      global_name=work_symbol+"_"+TF+"_counted_day";
      GlobalVariableSet(global_name,DayOfYear()); 
      recalculation_needed=false;
   }//if(recalculation_needed)
   else
   {//Если данные имеются в глобальных переменных терминала, то берём имеющиеся расчётные данные амплитуд из глобальных переменных терминала
      for(i=1;i<=10;i++)
      {
         global_name=work_symbol+"_"+TF+"_"+i;
         delta[i]=GlobalVariableGet(global_name);
         //Print("Глобал ",i," ",delta[i]);
      }
   }
}   
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{
//----
   int i;
   string b_str;
   for(i=1;i<=10;i++)
   {
      b_str="up_line"+i;
      ObjectDelete(b_str);
      b_str="down_line"+i;
      ObjectDelete(b_str);
      b_str="up_line_txt"+i;
      ObjectDelete(b_str);      
      b_str="down_line_txt"+i;
      ObjectDelete(b_str);       
   }
}   

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   string line_name;

   for(i=1;i<=10;i++)
   {  
      if(TF==43200) line_name="MN"+i;   
      if(TF==10080) line_name="W"+i;
      if(TF==1440) line_name="D"+i;
      if(TF==240) line_name="H"+4*i;
      if(TF==60) line_name="H"+i;
      if(TF==30) line_name="M"+30*i;
      if(TF==15) line_name="M"+15*i;
      if(TF==5) line_name="M"+5*i;
      if(TF==1) line_name="M"+i;
            
      up_line(i,iLow(NULL,TF,Lowest(work_symbol,TF,MODE_LOW,i,0))+delta[i],line_name);
      down_line(i,iHigh(NULL,TF,Highest(work_symbol,TF,MODE_HIGH,i,0))-delta[i],line_name);
   }

   return(0);
  }
//+------------------------------------------------------------------+
int up_line(int q_days, double level, string ln)
{
   string b_str="up_line"+q_days;

   if(ObjectFind(b_str) == -1) 
   {
     ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level);
     ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT);
     ObjectSet(b_str, OBJPROP_COLOR, Brown);
     ObjectSet(b_str, OBJPROP_RAY, true);
     ObjectSet(b_str, OBJPROP_WIDTH, 1);
     ObjectMove(b_str, 0, Time[1],  level);
   }
   else 
   {
      if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str);
   }
   
   b_str="up_line_txt"+q_days;
   string b_txt=ln;
   datetime t_bar;
   if(ObjectFind(b_str) == -1) 
   {
     ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0);
     ObjectSetText(b_str, b_txt, 8, "Arial", Brown);
     ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60,  level);
   }
   else 
   {
     ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60,  level);
   }      
   
   return(0);
}

int down_line(int q_days, double level, string ln)
{
   string b_str="down_line"+q_days;
   
   if(ObjectFind(b_str) == -1) 
   {
     ObjectCreate(b_str, OBJ_TREND, 0, Time[1], level, Time[1]+2700000,level);
     ObjectSet(b_str, OBJPROP_STYLE, STYLE_DOT);
     ObjectSet(b_str, OBJPROP_COLOR, DarkGreen);
     ObjectSet(b_str, OBJPROP_RAY, true);
     ObjectSet(b_str, OBJPROP_WIDTH, 1);
     ObjectMove(b_str, 0, Time[1],  level);
   }
   else 
   {
      if(MathAbs(level-ObjectGet(b_str, OBJPROP_PRICE1))>0.9*Point) ObjectDelete(b_str);
   }
   
   b_str="down_line_txt"+q_days;
   string b_txt=ln;
   if(ObjectFind(b_str) == -1) 
   {
     ObjectCreate(b_str, OBJ_TEXT, 0, Time[0], 0);
     ObjectSetText(b_str, b_txt, 8, "Arial", DarkGreen);
     ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60,  level);
   }
   else 
   {
     ObjectMove(b_str, 0, Time[0]+2*q_days*Period()*60,  level);
   }      
   
   return(0);
}









 
次に同じテーマで(少し重なりますが)。

優越感の表明 -http://www.investo.ru/forum/viewtopic.php?t=127490
ATRLevels -http://forexsystems.ru/phpBB/viewtopic.php?p=3960&highlight=atr#3960
 
もうひとつ、スプレッドについて。十分長い履歴でテストすると、正規化の問題が現れる(例えば、レート0.8の100点と1.36の100点が等しくないことは明らかだと思われる)。もちろん、価格で正規化(割り算)することも可能ですが、ボラティリティで正規化する方が正しいようです。前回までの2回の投稿で、ボラティリティの推定方法のバリエーションについて説明しました。配給問題に対する「正統派」の視点はないのだろうか。
 
英語で書くのは申し訳ないのですが、私のロシア語は下手すぎるのですすみません。
しかし、私はロシア語を理解する(読む)ことができますので、英語で答える必要はありません。
質問ですが、組合せグラフのパターン認識についてどう思われますか?
実際、チャートはグラフであり、市場データを分析する最良の方法は、組み合わせグラフのアルゴリズムを使うことかもしれませんねグラフアルゴリズムに関するサイトです:http://jgaa.info/
 
十分長い履歴でシステムをテストすると、正規化の問題が発生します(例えば、0.8で100pipsと1.36で100pipsは全く等しくないことは明らかだと思われます)。

これはとても貴重な指摘だと思います!!!価格スプレッドを、例えば過去1~2ヶ月の平均価格で正規化し、一連のバーについてスプレッドの正規化値を計算するのが理にかなっているのかもしれませんね。この原則に従って、近い将来、インジケーターの改良に努めたいと思います。
 
2デイヴ・メイソン
コンビナトリアルグラフ」の定義を検索してみました。http://www.math.lsa.umich.edu/mmss/coursesONLINE/graph/graph1/graph1.doc では、このように定義されています。
<img src="https://c.mql5.com/mql4/forum/2006/09/Graph1.gif" / translate="no">。

このとき、グラフという言葉は、関数のグラフの略です。 この種のグラフは、正確には順序付きペアの集合と定義できる
...
これから研究するグラフの種類は、上記のグラフと区別するために、組合せグラフと呼ばれることもある。 組合せグラフは、点(頂点)と線(エッジ)を結ぶネットワークとして絵で表現できる場合がある

この定義は、私たちの場合、そう言えるということではありませんか。"コンビナトリアルグラフ "はノンパターン?