//-- Поиск 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
}
你能告诉我,当两个EMA(五天/最低和最高)之差增加时,如何规定在最高EMA 卖出多头,在最低EMA 买入空头?
我在全局变量标题中使用"Rastvor " 作为两个EMAs 的差值 。
我如何在交易标准中写这段代码?
也就是说,按照我的理解,Vol_Arr[] 应该被初始化为一个全局数组。
这个问题当然是一个空问题,但是。
1.为什么指标中的体积显示正确?
2.在计算时,我访问了AOBuffer3[] 而不是Vol_Arr[]。
谢谢你!
当声明一个数组(不是一个缓冲区)时,你应该明确指定它的大小....。至少是这样。
也就是说,按照我的理解,Vol_Arr[] 应该被初始化为一个全局数组。
这个问题当然是一个空问题,但是。
1.为什么在指标中正确显示音量?
2.在计算时,我访问了AOBuffer3[] 而不是Vol_Arr[]。
谢谢你!
你不会为这个数组(Vol_Arr[]) 静态或动态地分配内存。
2.就我所看到的代码而言,MA和非卷的差异是在AOBuffer3[] 数组中计算的。
卷数是在ExtMapBuffer1 中计算的。
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 循环计数器--要么是逻辑出了问题,要么是实现出了问题。
谢谢你,弗拉迪斯拉夫!有些东西已经开始起作用了。但由于某些原因,只有像这样!:(
另一个问题,为什么文本标签不显示在指标窗口?