[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 131 1...124125126127128129130131132133134135136137138...631 新评论 [删除] 2012.05.17 05:03 #1301 alsu: win_idx是否正确? win_ind原来是正确的。 ObjectCreate("max",OBJ_HLINE,win_idx,0,top); 在正确的窗口中绘制。 ObjectSet("max",OBJPROP_COLOR,Yellow); 以正确的颜色绘制。 ObjectSet("max",OBJPROP_WIDTH,0); 画出正确的线。 但并没有定义在 double top=WindowPriceMax(win_idx)。 且topBuffer[]为空。 准则 #属性 indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Lime #property indicator_color2 Red //--- 缓冲区 双倍ExtMapBuffer1[]。 双倍ExtMapBuffer2[]。 double topBuffer[]。 bool initFinished=false; // 添加一个变量,它将记住初始化的状态。 // false - 初始化还没有发生。 // true - 已被初始化 //+------------------------------------------------------------------+ //|自定义指标初始化函数 //+------------------------------------------------------------------+ int init() { //---- 指标 SetIndexStyle(0,DRAW_LINE)。 SetIndexBuffer(0,ExtMapBuffer1)。 SetIndexStyle(1,DRAW_LINE)。 SetIndexBuffer(1,ExtMapBuffer2)。 SetIndexStyle(2,DRAW_NONE)。 SetIndexBuffer(2,topBuffer)。 IndicatorDigits(5)。 //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted()。 限度。 如果(counted_bars>0) counted_bars--。 limit=Bars-counted_bars。 //---- for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i)。 ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) 。 如果(initFinished==false) { IndicatorShortName("MACD_max-min")。 int win_idx=WindowFind("MACD_max-min")。 //找到我们的指标子窗口的编号 如果(win_idx<0) { // 如果子窗口编号为-1,则有一个错误 Print("Window not found")。 return(0); } double top=WindowPriceMax(win_idx)。 //找到当前图表的指定子窗口的垂直刻度的最大值 ObjectCreate("max",OBJ_HLINE,win_idx,0,top)。 //在我们的指标的一个子窗口中画一条水平线 ObjectSet("max",OBJPROP_COLOR,Yellow)。 ObjectSet("max",OBJPROP_WIDTH,0)。 WindowRedraw()。 //重新绘制窗口以看到这条线路 initFinished=true。 // 绘图完成了 } topBuffer[i]=top。 } //---- return(0); } //+------------------------------------------------------------------+ [ARCHIVE!] Any rookie question, Ojala EA 编码帮助 Alekseu Fedotov 2012.05.17 05:12 #1302 MK07: win_ind原来是正确的。 ObjectCreate("max",OBJ_HLINE,win_idx,0,top); 在正确的窗口中绘制。 ObjectSet("max",OBJPROP_COLOR,Yellow); 以正确的颜色绘制。 ObjectSet("max",OBJPROP_WIDTH,0); 画出正确的线。 但并没有定义在 double top=WindowPriceMax(win_idx)。 且topBuffer[]为空。 编码 #属性 indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Lime #property indicator_color2 Red //--- 缓冲区 双倍ExtMapBuffer1[]。 双倍ExtMapBuffer2[]。 double topBuffer[]。 bool initFinished=false; // 添加一个变量,它将记住初始化的状态。 // false - 初始化还没有发生。 // true - 已被初始化 //+------------------------------------------------------------------+ //|自定义指标初始化函数 //+------------------------------------------------------------------+ int init() { //---- 指标 SetIndexStyle(0,DRAW_LINE)。 SetIndexBuffer(0,ExtMapBuffer1)。 SetIndexStyle(1,DRAW_LINE)。 SetIndexBuffer(1,ExtMapBuffer2)。 SetIndexStyle(2,DRAW_NONE)。 SetIndexBuffer(2,topBuffer)。 IndicatorDigits(5)。 //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted()。 限度。 如果(counted_bars>0) counted_bars--。 limit=Bars-counted_bars。 //---- for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i)。 ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) 。 如果(initFinished==false) { IndicatorShortName("MACD_max-min")。 int win_idx=WindowFind("MACD_max-min")。 //找到我们的指标子窗口的编号 如果(win_idx<0) { // 如果子窗口编号为-1,则有一个错误 Print("Window not found")。 return(0); } double top=WindowPriceMax(win_idx)。 //找到当前图表的指定子窗口的垂直刻度的最大值 ObjectCreate("max",OBJ_HLINE,win_idx,0,top)。 //在我们的指标的一个子窗口中画一条水平线 ObjectSet("max",OBJPROP_COLOR,Yellow)。 ObjectSet("max",OBJPROP_WIDTH,0)。 WindowRedraw()。 //重新绘制窗口以看到这条线路 initFinished=true。 // 绘图完成了 } topBuffer[i]=top。 } //---- return(0); } //+------------------------------------------------------------------+ 对不起,我多管闲事了。 topBuffer[i]后面的循环和绘制,试试这个。 int start() { int counted_bars=IndicatorCounted(), limit; if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //---- for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i); ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); if(initFinished==false) { int win_idx=WindowFind("MACD_max-min"); // находим номер подокна нашего индикатора if(win_idx<0) { // если номер подокна равен -1, то возникла ошибка Print("Окно не найдено"); return(0); } double top=WindowPriceMax(win_idx); //находим максимальное значение вертикальной шкалы указанного подокна текущего графика topBuffer[i]=top; Comment( "\n"," top = ",top); ObjectCreate("max",OBJ_HLINE,win_idx,0,0); // рисуем горизонтальную линию в подокне нашего индикатора ObjectSet("max", OBJPROP_PRICE1, top); ObjectSet("max",OBJPROP_COLOR,Yellow); ObjectSet("max",OBJPROP_WIDTH,0); WindowRedraw(); // перерисовываем окно, чтобы увидить линиию initFinished=true; // рисование закончено } } //---- return(0); } //+------------------------------------------------------------------+ Евгений 2012.05.17 06:10 #1303 //Пробуйте с учетом мнения alsu. #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red double ExtMapBuffer1[],ExtMapBuffer2[]; int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2); IndicatorShortName("MACD_max-min");return(0);} int deinit(){return(0);} //+------------------------------------------------------------------+ int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top; if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min"); for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i); ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);} top=WindowPriceMax(win_idx);ObjectDelete("max"); if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top); ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}return(0);} //+------------------------------------------------------------------+ [删除] 2012.05.17 09:30 #1304 我是一个新手,安装了MetaFX和专家顾问,在演示中所有的工作和不希望在原始的工作中不希望只是站着。 Serg1 2012.05.17 10:07 #1305 你好! 请为我指出正确的方向。 我得到了N个相同类型的外部变量。如何在不重载代码的情况下从它们中选择最大值 - MathMax返回两个值的最大值,但如果它,比方说,20? 或者,如何从这些数据创建一个数组,然后应用ArrayMaximum? extern int A = 10; extern int .......; extern int N = 1253; 预先感谢 ! Serg1 2012.05.17 10:33 #1306 Roll: https://docs.mql4.com/ru/array/ArrayMaximum int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0) 搜索具有最大值的元素。该函数返回数组中最大元素的位置。 参数。 array[] - 数字数组,被搜索到。 count - 要搜索的元素的数量。 Start - 搜索的起始索引。 例子。 double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9}; int maxValueIdx=ArrayMaximum(num_array)。 Print("Max value = ", num_array[maxValueIdx])。 但是,以 int Max [N] = {A,.....,N}; 阵列不被创建。 其中:A,......N是相同类型的给定变量。变量的数量=N Евгений 2012.05.17 10:47 #1307 从外部变量创建一个字符串数组的例子(脚本)。 extern string sym1="GBPUSD"; extern string sym2="GBPJPY"; extern string sym3="EURUSD"; extern string sym4="EURJPY"; extern string sym5="AUDUSD"; extern string sym6="AUDJPY"; extern string sym7="NZDUSD"; extern string sym8="USDCAD"; string sym[8]; //+------------------------------------------------------------------+ int init(){sym[1]=sym1;sym[2]=sym2;sym[3]=sym3;sym[4]=sym4; sym[5]=sym5;sym[6]=sym6;sym[7]=sym7;sym[8]=sym8;return(0);} int start(){Alert("символ ",sym[1]);return(0);} Serg1 2012.05.17 11:10 #1308 Roll: 从外部变量创建一个字符串数组的例子(脚本)。 谢谢你! 它起作用了,但有一个修正:用 "我 "代替 "我"。 int init(){sym[1]=sym1;............ 做到以下几点 int init(){sym[0]=sym1;....... 然后对所有元素进行统计。 [删除] 2012.05.17 11:37 #1309 r772ra: 对不起,打扰您了。 topBuffer[i]后面的循环和绘制,这样试试。 你的选择没有用,但要感谢你的关注、努力工作和对他人问题的理解。 [删除] 2012.05.17 12:37 #1310 Roll: 太感谢了 你这个版本的指标是有效的! 我试图用MQL4教程和指标的例子来解决这些问题,但没有任何效果。 如果你有愿望、时间和倾向,可以帮助我弄清楚原因。 1.当你安装指标线时,收到的值是0(零),只有在第一个刻度线到来时,才会有变量top的值,或者应该打开参数窗口,并立即关闭它。 2.虽然在init()中有以下一行,但参数top被计算到了第4个符号 IndicatorDigits(Digits+1); 和线 top=WindowPriceMax(win_idx)。 我把它换成了 top=NormalizeDouble((WindowPriceMax(win_idx)), Digits+1); 这并没有什么帮助!而指标窗口刻度的数值是5位数。 3.随着指标的删除,评论 并没有从图表中删除。 编码 -------- #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Lime #property indicator_color2 Red double ExtMapBuffer1[], ExtMapBuffer2[]; //-------------------------------- int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); IndicatorShortName("MACD_max-min_v2"); IndicatorDigits(Digits+1); return(0); } //-------------------------------- int deinit() { return(0); } //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(),limit,win_idx; double top; if(counted_bars>0)counted_bars--; limit=Bars-counted_bars; win_idx=WindowFind("MACD_max-min_v2"); for(int i=0;i<limit;i++) { ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i); ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); } // top=WindowPriceMax(win_idx); top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1); Comment( "\n"," top = ",top); ObjectDelete("max"); if(ObjectFind("max")!=win_idx) { ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top); ObjectSet("max",OBJPROP_COLOR,Yellow); ObjectSet("max",OBJPROP_WIDTH,0); } return(0); } //+------------------------------------------------------------------+ 附加的文件: macd_max-min_v2.mq4 2 kb [ARCHIVE!] Any rookie question, Ojala EA MACD双线指标,怎么在交叉上加上箭头,指标背离加上箭头? 1...124125126127128129130131132133134135136137138...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
win_idx是否正确?
win_ind原来是正确的。
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); 在正确的窗口中绘制。
ObjectSet("max",OBJPROP_COLOR,Yellow); 以正确的颜色绘制。
ObjectSet("max",OBJPROP_WIDTH,0); 画出正确的线。
但并没有定义在
double top=WindowPriceMax(win_idx)。
且topBuffer[]为空。
准则
#属性 indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
//--- 缓冲区
双倍ExtMapBuffer1[]。
双倍ExtMapBuffer2[]。
double topBuffer[]。
bool initFinished=false; // 添加一个变量,它将记住初始化的状态。
// false - 初始化还没有发生。
// true - 已被初始化
//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int init()
{
//---- 指标
SetIndexStyle(0,DRAW_LINE)。
SetIndexBuffer(0,ExtMapBuffer1)。
SetIndexStyle(1,DRAW_LINE)。
SetIndexBuffer(1,ExtMapBuffer2)。
SetIndexStyle(2,DRAW_NONE)。
SetIndexBuffer(2,topBuffer)。
IndicatorDigits(5)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
限度。
如果(counted_bars>0)
counted_bars--。
limit=Bars-counted_bars。
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i)。
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) 。
如果(initFinished==false)
{
IndicatorShortName("MACD_max-min")。
int win_idx=WindowFind("MACD_max-min")。
//找到我们的指标子窗口的编号
如果(win_idx<0)
{
// 如果子窗口编号为-1,则有一个错误
Print("Window not found")。
return(0);
}
double top=WindowPriceMax(win_idx)。
//找到当前图表的指定子窗口的垂直刻度的最大值
ObjectCreate("max",OBJ_HLINE,win_idx,0,top)。
//在我们的指标的一个子窗口中画一条水平线
ObjectSet("max",OBJPROP_COLOR,Yellow)。
ObjectSet("max",OBJPROP_WIDTH,0)。
WindowRedraw()。
//重新绘制窗口以看到这条线路
initFinished=true。
// 绘图完成了
}
topBuffer[i]=top。
}
//----
return(0);
}
//+------------------------------------------------------------------+
win_ind原来是正确的。
ObjectCreate("max",OBJ_HLINE,win_idx,0,top); 在正确的窗口中绘制。
ObjectSet("max",OBJPROP_COLOR,Yellow); 以正确的颜色绘制。
ObjectSet("max",OBJPROP_WIDTH,0); 画出正确的线。
但并没有定义在
double top=WindowPriceMax(win_idx)。
且topBuffer[]为空。
编码
#属性 indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Lime
#property indicator_color2 Red
//--- 缓冲区
双倍ExtMapBuffer1[]。
双倍ExtMapBuffer2[]。
double topBuffer[]。
bool initFinished=false; // 添加一个变量,它将记住初始化的状态。
// false - 初始化还没有发生。
// true - 已被初始化
//+------------------------------------------------------------------+
//|自定义指标初始化函数
//+------------------------------------------------------------------+
int init()
{
//---- 指标
SetIndexStyle(0,DRAW_LINE)。
SetIndexBuffer(0,ExtMapBuffer1)。
SetIndexStyle(1,DRAW_LINE)。
SetIndexBuffer(1,ExtMapBuffer2)。
SetIndexStyle(2,DRAW_NONE)。
SetIndexBuffer(2,topBuffer)。
IndicatorDigits(5)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
限度。
如果(counted_bars>0)
counted_bars--。
limit=Bars-counted_bars。
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i)。
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i) 。
如果(initFinished==false)
{
IndicatorShortName("MACD_max-min")。
int win_idx=WindowFind("MACD_max-min")。
//找到我们的指标子窗口的编号
如果(win_idx<0)
{
// 如果子窗口编号为-1,则有一个错误
Print("Window not found")。
return(0);
}
double top=WindowPriceMax(win_idx)。
//找到当前图表的指定子窗口的垂直刻度的最大值
ObjectCreate("max",OBJ_HLINE,win_idx,0,top)。
//在我们的指标的一个子窗口中画一条水平线
ObjectSet("max",OBJPROP_COLOR,Yellow)。
ObjectSet("max",OBJPROP_WIDTH,0)。
WindowRedraw()。
//重新绘制窗口以看到这条线路
initFinished=true。
// 绘图完成了
}
topBuffer[i]=top。
}
//----
return(0);
}
//+------------------------------------------------------------------+
对不起,我多管闲事了。
topBuffer[i]后面的循环和绘制,试试这个。
你好!
请为我指出正确的方向。
我得到了N个相同类型的外部变量。如何在不重载代码的情况下从它们中选择最大值 - MathMax返回两个值的最大值,但如果它,比方说,20?
或者,如何从这些数据创建一个数组,然后应用ArrayMaximum?
extern int A = 10;
extern int .......;
extern int N = 1253;
预先感谢 !
https://docs.mql4.com/ru/array/ArrayMaximum
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)搜索具有最大值的元素。该函数返回数组中最大元素的位置。
参数。
array[] - 数字数组,被搜索到。
count - 要搜索的元素的数量。
Start - 搜索的起始索引。
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array)。
Print("Max value = ", num_array[maxValueIdx])。
但是,以
int Max [N] = {A,.....,N};
阵列不被创建。
其中:A,......N是相同类型的给定变量。变量的数量=N
从外部变量创建一个字符串数组的例子(脚本)。
从外部变量创建一个字符串数组的例子(脚本)。
谢谢你!
它起作用了,但有一个修正:用 "我 "代替 "我"。
int init(){sym[1]=sym1;............
做到以下几点
int init(){sym[0]=sym1;.......
然后对所有元素进行统计。
对不起,打扰您了。
topBuffer[i]后面的循环和绘制,这样试试。
太感谢了
你这个版本的指标是有效的!
我试图用MQL4教程和指标的例子来解决这些问题,但没有任何效果。
如果你有愿望、时间和倾向,可以帮助我弄清楚原因。
1.当你安装指标线时,收到的值是0(零),只有在第一个刻度线到来时,才会有变量top的值,或者应该打开参数窗口,并立即关闭它。
2.虽然在init()中有以下一行,但参数top被计算到了第4个符号
IndicatorDigits(Digits+1);
和线
top=WindowPriceMax(win_idx)。
我把它换成了
top=NormalizeDouble((WindowPriceMax(win_idx)), Digits+1);
这并没有什么帮助!而指标窗口刻度的数值是5位数。
3.随着指标的删除,评论 并没有从图表中删除。
编码
--------
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],
ExtMapBuffer2[];
//--------------------------------
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min_v2");
IndicatorDigits(Digits+1);
return(0);
}
//--------------------------------
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted(),limit,win_idx;
double top;
if(counted_bars>0)counted_bars--;
limit=Bars-counted_bars;
win_idx=WindowFind("MACD_max-min_v2");
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
}
// top=WindowPriceMax(win_idx);
top=NormalizeDouble((WindowPriceMax(win_idx)),Digits+1);
Comment( "\n"," top = ",top);
ObjectDelete("max");
if(ObjectFind("max")!=win_idx)
{
ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
ObjectSet("max",OBJPROP_COLOR,Yellow);
ObjectSet("max",OBJPROP_WIDTH,0);
}
return(0);
}
//+------------------------------------------------------------------+