//-- Поиск High & Time if (AOBuffer3[i]>=0) Если Awesome больше нуля
{
prhgh_s = High[i]; // -----if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} --- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
}
//-- Поиск Low & Time if (AOBuffer3[i]<=0) Если Awesome меньше нуля
{
prlw_s = Low[i]; // -----if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
}
// -- Пересчет баров от High до Lowint colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета
for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара// -- Значение VLUP = 47
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 SteelBlue
#property indicator_width1 2
//---- basic fan indicator parameters
extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=2;
extern bool Show_Volume=true;
extern double coaf=1.5;
extern bool Show_Vol_line=true;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];
double VLUP;
double prhgh_e=0, prhgh_s, prlw_e=0, prlw_s;
datetime tmhgh, tmlw;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
string name_ind = "Awesome_super_volumes";
IndicatorShortName("Awesome_super_volumes");
//---- AO_fan line 2 (basic)
if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
else
{Show_AOLine_2=DRAW_NONE; }
SetIndexBuffer(0,AOBuffer3);
SetIndexStyle(0,Show_AOLine_2);
SetIndexLabel(0,"basic line");
SetIndexBuffer(1,ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexLabel(1,"Volume");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Awesome Oscillator |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
double prev,current;
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- AO_fan line 2 (basic) buffer
for(int i=0; i<limit; i++)
{
//---- AO_fan basic line + Volumes
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
}
}
//-- Поиск High & Time
if (AOBuffer3[i]>=0) //Если Awesome больше нуля
{
prhgh_s = High[i]; // -----
if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
}
//-- Поиск Low & Time
if (AOBuffer3[i]<=0) //Если Awesome меньше нуля
{
prlw_s = Low[i]; // -----
if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
}
// -- Пересчет баров от High до Low
int colbr = iBarShift(NULL,0,tmhgh)-iBarShift(NULL,0,tmlw); //-- Здесь считаю общее количество баров от наименьшего до наибольшего значения // -- пока значение colbr = 0
int shift=iBarShift(NULL,0,tmlw); // -- Это точка отсчета
for (i=0; i<=colbr; i++)
{VLUP += MathAbs(iVolume(NULL,0, shift+i));} //-- Значению VLUP суммируем все объемы начиная от самого низкого бара до самого высокого бара // -- Значение VLUP = 47
SetText("Awesome_super_volumes"+Time[i], DoubleToStr(VLUP,0), tmhgh, 0.0010, Black);
SetText2("Волна1",DoubleToStr(VLUP,0),980,10,Gray,10);
SetText2("Волна2",TimeToStr(tmlw,0),980,25,Gray,10);
SetText2("Волна3",TimeToStr(tmhgh,0),980,40,Gray,10);
SetText2("Волна4",DoubleToStr(colbr,0),980,55,Gray,10);
//---- done
return(0);
}
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
{
// if (ObjectFind(name)!=-1) ObjectDelete(name);
ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
ObjectSetText(name, Vl, 10, "Times New Roman", c);
ObjectSet(name, OBJPROP_TIME1 , t1);
ObjectSet(name, OBJPROP_PRICE1, p1);
ObjectSet(name, OBJPROP_COLOR, c);
}
void SetText2(string name, string text, int xdist, int ydist, color c, int size)
{
ObjectCreate(name,OBJ_LABEL,0,0,0,0,0);
ObjectSet(name, OBJPROP_XDISTANCE, xdist);
ObjectSet(name, OBJPROP_YDISTANCE, ydist);
ObjectSetText(name,text,7,"Arial Black",c);
}
for(int i=0; i<limit; i++)
{
//---- AO_fan basic line + Volumes
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
}
} // здесь цикл закончился//-- Поиск High & Time if (AOBuffer3[i]>=0) //Если Awesome больше нуля
{
prhgh_s = High[i]; // -----if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];} //--- Ищу самый высокий бар и определяю время этого бара // -- пока значение tmhgh = 0
}
//-- Поиск Low & Time if (AOBuffer3[i]<=0) //Если Awesome меньше нуля
{
prlw_s = Low[i]; // -----if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];} // --- Ищу самый низкий бар и определяю время этого бара // -- пока значение tmlw = 0
}
2本のEMA(5日/最小と最大)の差が大きくなったときに、最大EMAで ロングを売り、最小EMAで ショートを買うという処方を教えてください。
グローバル変数のヘッダで「Rastvor」を2本のEMAの 差として使っています 。
このコードを取引基準に書くにはどうしたらいいのでしょうか?
つまり、Vol_Arr[] はグローバル配列として初期化 されるべきだと私は理解しています。
質問はもちろんヌルい質問です、BUT。
1.インジケーターにボリュームが正しく表示されるのはなぜですか?
2.計算するときは、Vol_Arr[]ではなく、AOBuffer3[] にアクセスしています。
ありがとうございました。
バッファではない)配列を宣言する ときは、そのサイズを明示的に指定する必要があります......。少なくとも
つまり、Vol_Arr[] はグローバル配列として初期化 されるべきだと私は理解しています。
質問はもちろんヌルい質問です、BUT。
1.インジケーターにボリュームが正しく表示されるのはなぜですか?
2.計算するときは、Vol_Arr[]ではなく、AOBuffer3[] にアクセスしています。
ありがとうございました。
この配列(Vol_Arr[]) には、静的にも動的にもメモリは割り当てない。
2.コードを見る限り、AOBuffer3[] 配列でMAとnot volumeの差分が計算されているようです。
ボリュームはExtMapBuffer 1にカウントされます。
Vol_Arr[] は、グローバルなものとして、または静的な修飾子で初期化することができます - あなた自身を選択することができますが、メモリは、任意のケースで割り当てられるべきである、または前の二つの配列と同様に、指標バッファにリンク - あなたはいくつかのバリエーションを挙げることができます。
1) 使用する配列はいずれもインジケータ・バッファで接続されている、つまりメモリが(暗黙のうちにではあるが)割り当てられている。
......
Vladislavさん、もう一度コードを見直しました。旧バージョンのインジケータからVol_Arr[] のコードが一部残っていたので、削除 しました。
まだこの部分にエラーがあると思うのですが、どこが原因なのかわかりませんこの部分を詳しくコメントアウトしています。
Vladislavさん、もう一度コードを見直しました。旧バージョンのインジケータからVol_Arr[] のコードが一部残っていたので、削除 しました。
やはりこの部分にエラーがあると思うのですが、どこが原因なのかがわかりませんこの部分を詳しくコメントしました。
これです。
今回もありがとうございました
これです。
一目でわかる。
ハイライトされた部分はループの外側で、ループカウンタi を 使っている - ロジックか実装のどちらかが間違っている
なぜ、CSVファイルでの数値が必要なのですか?
認識アルゴリズムのテストやデバッグに必要です。
他人のものをパクるのではなく、自分で書いて理解する。
具体的に何を書くのか?自分でチャートの図形をマークアップして、適切なヒストリーの塊を書き出すということですか?この解決策は、今のところキューの最初のものですが、それでも誰かがすでにやってくれていることを期待しています。結局、面倒くさいだけなんですよね。
たくさんあればいいというものではない!?
反対させてください。テストスイートが大きければ大きいほど、プログラムの結果の統計的信頼性は高くなる。
p.s. 質問はまだ有効です。(この記事の質問を見る )
みなさん、こんにちは!!!
現在のMAの最大値でロングクローズするには、どのようなコードが必要か教えてください。
以下は実際の取引基準で、不明な点は赤字で強調しています。
また、ポジションの終了をプログラムに指示する方法も不明です。
MA1とMA2の差分を増やした後?
//-------------------------------------------------------------- 5 --
// 取引条件
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_EMA,PRICE_HIGH,1); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_EMA,PRICE_LOW,1); // MA_2
if ( iHigh (Symbol(),Period(),0) >= MA_1_t) //
{
Opn_S=true;
} }.
if ( iLow (Symbol(),Period(),0) <= MA_2_t) //
{
Opn_B=true; // 買い基準オープン
}
if(今日の最大iMAでロングクローズを作るにはどんな コードが必要か?)
{
Cls_B=true;
}
//-------------------------------------------- 6 --...
ざっと見た感じでは
ハイライトされた部分はループの外側で、i ループのカウンターを使用しています - ロジックか実装のどちらかが間違っています
ウラジスラフさん、ありがとうございます! 何かが動き出しましたね。でも、なぜかこんなのしかない!?:(
もう一つの質問ですが、なぜテキストラベルがインジケーターウィンドウに表示されないのでしょうか?