[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 160 1...153154155156157158159160161162163164165166167...1145 新评论 Denis Lysenko 2009.07.23 05:02 #1591 extern double SL=100, TP=200, Tral=0, steps=2, Level=100; extern int TF1=0, TF2=60, TF3=240, per1=14, per2=14, per3=14, shiftbars=20; double sl, tp, cci[3], lastbar, lastpos=-1, lot=0.1, x=0.0001, calc, price, lb; int init(){if( SL< Tral) SL= Tral;if(MarketInfo(Symbol(),MODE_DIGITS)==3) x=0.01; TP*= x; SL*= x; Tral*= x; calc=MathPow(2, steps)*0.1;} double lot(){int l;double lotiki=0.1;bool isit=false; for(int i=1; i<= steps; i++){ if(!OrderSelect(OrdersHistoryTotal()- i, SELECT_BY_POS, MODE_HISTORY))break; if(OrderProfit()>0) lotiki*=2; l++; if(OrderLots()== calc) { isit=true;break;} if(OrderProfit()<0) break;} if( l== steps+1 || isit) lotiki=0.1; return( lotiki);} int Trailing() {double Tip, SL1; for(int i=OrdersTotal()-1; i>=0; i--){ OrderSelect( i, SELECT_BY_POS);if(OrderMagicNumber()==350000){ Tip=OrderType(); SL1=OrderStopLoss(); if( Tip==0) {if(Bid- SL1> Tral) {OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Tral,OrderTakeProfit(),0);break;}} if( Tip==1) {if( SL1-Ask> Tral) {OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Tral,OrderTakeProfit(),0);break;}} }}} int Closeorders(){ for(int i=OrdersTotal()-1; i>=0; i--){OrderSelect( i, SELECT_BY_POS);if(OrderMagicNumber()==350000) {if(OrderType()==0) price=Bid;else price=Ask; OrderClose(OrderTicket(),OrderLots(), price,50);break;}} } void start(){ //if(iBarShift(NULL,0,lastbar,false)==0)return; //lastbar=CurTime(); if(OrdersTotal()!=0 && Tral!=0){ Trailing();} //cci=iCustom(NULL,0,"i-3CCI-h3",CCI_Period_0,Level_0,TF_1,CCI_Period_1,Level_1,TF_2,CCI_Period_2,Level_2,1000,-1,0,0); cci[0]=iCCI(NULL, TF1, per1,0,1); cci[1]=iCCI(NULL, TF2, per2,0,0); cci[2]=iCCI(NULL, TF3, per3,0,0); string s1="cci-0 *** "+DoubleToStr( cci[0],3); string s2="cci-1 *** "+DoubleToStr( cci[1],3); string s3="cci-2 *** "+DoubleToStr( cci[2],3); string str[3]; str[0]= s1; str[1]= s2; str[2]= s3; color col=Lime; for(int y=0; y<3; y++) {ObjectCreate("textSignal"+ y,OBJ_LABEL,0,0,0,0,0); ObjectSet("textSignal"+ y, OBJPROP_CORNER,1); ObjectSet("textSignal"+ y, OBJPROP_XDISTANCE,35-25); ObjectSet("textSignal"+ y, OBJPROP_YDISTANCE, y*(20)+20+8); if( cci[ y]>=0) col=Lime;else col=Red; if( cci[ y]> Level) col=Aqua; if( cci[ y]<- Level) col=DarkViolet; ObjectSetText("textSignal"+ y, str[ y],15,"Tahoma", col); } if(OrdersTotal()!=0)return; if( cci[0]> Level && cci[1]> Level && cci[2]> Level && (/*iBarShift(NULL,0,lb,false)>shiftbars || */ lastpos!=0)) { Closeorders(); tp=Ask+ TP; sl=Ask- SL;if( TP==0) tp=0;if( SL==0) sl=0; OrderSend(Symbol(),0, lot(),Ask,50, sl, tp,"i-3CCI-h3_Buy",350000,0); lastpos=0; lb=Time[0];} if( cci[0]<- Level && cci[1]<- Level && cci[2]<- Level && (/*iBarShift(NULL,0,lb,false)>shiftbars || */ lastpos!=1)) { Closeorders(); tp=Bid- TP; sl=Ask+ SL;if( TP==0) tp=0;if( SL==0) sl=0; OrderSend(Symbol(),1, lot(),Bid,50, sl, tp,"i-3CCI-h3_Sell",350000,0); lastpos=1; lb=Time[0];} } 请帮助。 如果在EA 1.mq4(附件)的视觉测试中,我在图表上放上指标3-cci-h3(附件),那么,看起来,在参数完全相同的情况下,指标的计算cci信号和实际cci(右上角的对象文本)并不一致。 为什么? 为什么警报在这个指标中不起作用? 专家顾问代码。 指标代码。 //+------------------------------------------------------------------+ //| i-3CCI-h.mq4| //| johnfantom & kimIV ! //| http://www.kimiv.ru | //| | //| 2006年1月2日,CCI在一瓶中加入3个TF。 //+------------------------------------------------------------------+ #财产版权 "johnfantom & KimIV" #属性链接 "http://www.kimiv.ru" #属性 indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DodgerBlue #property indicator_maximum 1.4 #property indicator_level1 0 #property indicator_minimum -1.2 //------- 外部指标参数 ------------------------------- 外部int CCI_Period_0 = 14; // 当前时间框架的CCI周期。 extern int Level_0 = 100; // 当前TF的CCI水平。 extern int TF_1 = 60; // 第一个时间范围内的分钟数 extern int CCI_Period_1 = 14; // 第一个TF的CCI周期 extern int Level_1 = 100; // 第一个TF的CCI水平。 extern int TF_2 = 240; // 第二个TF的分钟数 extern int CCI_Period_2 = 14; // 第二个TF的CCI周期 extern int Level_2 = 100; // 第二个TF的CCI水平。 extern int NumberOfBars = 1000; //条数(0-全部)。 extern int ExtBars = 3; int per; //------- 指示器缓冲区 ------------------------------------------ double buf0[]; //+------------------------------------------------------------------+ //|自定义指标初始化功能 //+------------------------------------------------------------------+ void init() { IndicatorDigits(1); SetIndexBuffer(0, buf0)。 SetIndexLabel(0, "i-3CCI-h")。 SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2)。 SetIndexEmptyValue(0,0)。 } //+------------------------------------------------------------------+ //|自定义指标去初始化功能| //+------------------------------------------------------------------+ void deinit() { 评论(")。 } //+------------------------------------------------------------------+ //|自定义指标迭代函数| //+------------------------------------------------------------------+ 空白启动() { 双重cci0,cci1,cci2。 int nb1, nb2; count; int LoopBegin, sh; 如果(NumberOfBars==0)LoopBegin=Bars-1。 否则LoopBegin=NumberOfBars-1。 LoopBegin=MathMin(Bars-1, LoopBegin)。 count=IndicatorCounted()。 for (sh=count; sh>=0; sh--) { nb1=iBarShift(NULL, TF_1, Time[sh+1], False)。 nb2=iBarShift(NULL, TF_2, Time[sh+1], False)。 cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1)。 cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1)。 cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2)。 /* double cci[3]; cci[0]=cci0。 cci[1]=cci1。 cci[2]=cci2。 string s1="cci-0 ***"+DoubleToStr(cci[0],3)。 string s2="cci-1 ***"+DoubleToStr(cci[1],3)。 string s3="cci-2 ***"+DoubleToStr(cci[2],3)。 string str[3]; str[0]=s1。 str[1]=s2。 str[2]=s3。 color col=Lime; for(int y=0;y<3;y++) {ObjectCreate("textSignal "+y,OBJ_LABEL,0,0,0,0) ObjectSet("textSignal "+y,OBJPROP_CORNER,1)。 ObjectSet("textSignal "+y,OBJPROP_XDISTANCE,35-25)。 ObjectSet("textSignal "+y,OBJPROP_YDISTANCE,y*(20)+20+8)。 如果(cci[y]>=0)col=Lime;否则col=Red。 如果(cci[y]>Level_0) col=Aqua。 如果(cci[y]<-Level_0) col=DarkViolet; ObjectSetText("textSignal "+y,str[y],15, "Tahoma",col); } */ 如果(ci0>Level_0 && cci1>Level_1 && cci2>Level_2){buf0[sh]=1; if (per != Time[0]) {per = Time[0]; 如果(sh<=ExtBars &&ExtBars!=-) Alert(Symbol(),Period()," ", TimeYear(Time[sh])," 。 TimeDay(Time[sh])," 。 TimeMonth(Time[sh])," 。 TimeHour(Time[sh])," :" 。 TimeMinute(Time[sh])," 。 "购买");}} 如果(ci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2){buf0[sh]=-1。 if (per != Time[0]) {per = Time[0]; 如果(sh<=ExtBars &&ExtBars!=-) Alert(Symbol(),Period()," ", TimeYear(Time[sh])," 。 TimeDay(Time[sh])," 。 TimeMonth(Time[sh])," 。 TimeHour(Time[sh])," :" 。 TimeMinute(Time[sh])," "。 "销售");}} } } //+------------------------------------------------------------------+ 我将免费编写指标 [WARNING CLOSED!] Any newbie I will write the [删除] 2009.07.23 06:25 #1592 你自己试试吧,我根本就搞不定它。这根本就没有用。 线条应该是一致的。但在实践中,情况有些不同。 int start() { int counted_bars=IndicatorCounted(); //---- ObjectCreate("fibowhite",OBJ_TRENDBYANGLE,0,0,0,0,0); //ObjectSet("fibowhite",OBJPROP_ANGLE,angle_); ObjectSet("fibowhite", OBJPROP_TIME1,Time[5]); ObjectSet("fibowhite", OBJPROP_TIME2,Time[1]); ObjectSet("fibowhite", OBJPROP_PRICE1,Low[5]); ObjectSet("fibowhite", OBJPROP_PRICE2,Low[1]); ObjectSet("fibowhite", OBJPROP_COLOR,Red); //---------------------------------------------------------- ObjectCreate("fibowhite1",OBJ_TRENDBYANGLE,0,0,0,0,0); ObjectSet("fibowhite1", OBJPROP_TIME1,Time[5]); //ObjectSet("fibowhite1",OBJPROP_TIME2,Time[1]); ObjectSet("fibowhite1", OBJPROP_PRICE1,Low[5]); //ObjectSet("fibowhite1",OBJPROP_PRICE2,Low[1]); ObjectSet("fibowhite1", OBJPROP_COLOR,Green); WindowRedraw(); double awd=ObjectGet("fibowhite", OBJPROP_ANGLE); Comment("AngleRED= ",ObjectGet("fibowhite", OBJPROP_ANGLE),"\n AngleWHITE= ",ObjectGet("fibowhite1", OBJPROP_ANGLE)); ObjectSet("fibowhite1", OBJPROP_ANGLE,ObjectGet("fibowhite", OBJPROP_ANGLE)); //---- return(0); } [删除] 2009.07.23 07:00 #1593 能否请你告诉我可能出了什么问题? 我做了一个递归函数,把一个值写到缓冲区。 当从指示器中调用时工作正常,当我试图把它放在EA中时,答案是0。 问题可能是什么? [删除] 2009.07.23 08:14 #1594 Andrej78 писал(а)>> 能否请你告诉我可能出了什么问题? 我做了一个递归函数,把一个值写到缓冲区。 当从指示器中调用时工作正常,当我试图把它放在EA中时,答案是0。 问题可能是什么? 也许缓冲区的大小没有设置!? [删除] 2009.07.23 08:30 #1595 我找到了搭讪发生的地方。 事实证明,IndicatorCounted 在指标中给出了0,而在专家顾问中给出了-1(这个函数有正确性检查-->=0,因此在专家顾问中不考虑它)。 原因是什么,如何解决这个错误? MT4构建225,eurusd M1。 [删除] 2009.07.23 09:03 #1596 Andrej78 писал(а)>> 我找到了搭讪发生的地方。 事实证明,IndicatorCounted 在指标中给出了0,而在专家顾问中给出了-1(这个函数有正确性检查-->=0,因此在专家顾问中不考虑它)。 原因是什么,如何解决这个错误? MT4构建225,eurusd M1。 https://docs.mql4.com/ru/customind evgenio 2009.07.23 10:09 #1597 if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true) { int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green); bay=false; Print (GetLastError()); } } if (s>(High[0]-(High[0]-Low[0])/2) && bay==false) { OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES); Print (GetLastError()); OrderClose(t,0.1,Ask,5,Red); } 在关闭订单时,记录代码4051不是正确的票据,这是什么错误,请告知? [WARNING CLOSED!] Any newbie Any rookie question, so How to code? Victor Nikolaev 2009.07.23 10:16 #1598 evgenio писал(а)>> if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true) { int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green); bay=false; Print (GetLastError()); } } if (s>(High[0]-(High[0]-Low[0])/2) && bay==false) { OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES); Print (GetLastError()); OrderClose(t,0.1,Ask,5,Red); } 在关闭订单时,记录代码4051不是一个有效的票据,请告知什么是错误? 开盘和收盘发生在不同的时间点上。而专家顾问不再记得曾经分配给变量t的内容。要么就应该是全局的,要么就是静态的。 一个全局变量是在函数之外定义的。 或者可以将其声明为静态int evgenio 2009.07.23 10:20 #1599 Vinin >> : 开盘和收盘发生在不同的时间点上。而专家顾问不再记得曾经分配给变量t的内容。要么就应该是全局的,要么就是静态的。 一个全局变量是在函数之外定义的。 或者可以将其声明为静态int 非常感谢,我忘了))。 Oleg 2009.07.23 14:30 #1600 在我设定的指标中(然后将它们与Time[i]进行比较)。 extern datetime StartRange = D'1970.12.24'; extern datetime EndRange = D'2020.12.24'; 然后在循环中 Comment( "\n", "Time[i] = " , Time[ i], "\n", "StrToTime(StartRange) = " , StrToTime( StartRange), "\n", "StrToTime(EndRange) = " , StrToTime( EndRange), "\n" ); 因此,StrToTime(StartRange) 和StrToTime(EndRange) 产生零 。 - 为什么以及如何解决这个问题? 1...153154155156157158159160161162163164165166167...1145 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果在EA 1.mq4(附件)的视觉测试中,我在图表上放上指标3-cci-h3(附件),那么,看起来,在参数完全相同的情况下,指标的计算cci信号和实际cci(右上角的对象文本)并不一致。
为什么?
为什么警报在这个指标中不起作用?
专家顾问代码。
指标代码。
//+------------------------------------------------------------------+
//| i-3CCI-h.mq4|
//| johnfantom & kimIV !
//| http://www.kimiv.ru |
//| |
//| 2006年1月2日,CCI在一瓶中加入3个TF。
//+------------------------------------------------------------------+
#财产版权 "johnfantom & KimIV"
#属性链接 "http://www.kimiv.ru"
#属性 indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_maximum 1.4
#property indicator_level1 0
#property indicator_minimum -1.2
//------- 外部指标参数 -------------------------------
外部int CCI_Period_0 = 14; // 当前时间框架的CCI周期。
extern int Level_0 = 100; // 当前TF的CCI水平。
extern int TF_1 = 60; // 第一个时间范围内的分钟数
extern int CCI_Period_1 = 14; // 第一个TF的CCI周期
extern int Level_1 = 100; // 第一个TF的CCI水平。
extern int TF_2 = 240; // 第二个TF的分钟数
extern int CCI_Period_2 = 14; // 第二个TF的CCI周期
extern int Level_2 = 100; // 第二个TF的CCI水平。
extern int NumberOfBars = 1000; //条数(0-全部)。
extern int ExtBars = 3;
int per;
//------- 指示器缓冲区 ------------------------------------------
double buf0[];
//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
void init() {
IndicatorDigits(1);
SetIndexBuffer(0, buf0)。
SetIndexLabel(0, "i-3CCI-h")。
SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2)。
SetIndexEmptyValue(0,0)。
}
//+------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+------------------------------------------------------------------+
void deinit() {
评论(")。
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
空白启动() {
双重cci0,cci1,cci2。
int nb1, nb2; count;
int LoopBegin, sh;
如果(NumberOfBars==0)LoopBegin=Bars-1。
否则LoopBegin=NumberOfBars-1。
LoopBegin=MathMin(Bars-1, LoopBegin)。
count=IndicatorCounted()。
for (sh=count; sh>=0; sh--) {
nb1=iBarShift(NULL, TF_1, Time[sh+1], False)。
nb2=iBarShift(NULL, TF_2, Time[sh+1], False)。
cci0=iCCI(NULL, 0, CCI_Period_0, PRICE_CLOSE, sh+1)。
cci1=iCCI(NULL, TF_1, CCI_Period_1, PRICE_CLOSE, nb1)。
cci2=iCCI(NULL, TF_2, CCI_Period_2, PRICE_CLOSE, nb2)。
/* double cci[3];
cci[0]=cci0。
cci[1]=cci1。
cci[2]=cci2。
string s1="cci-0 ***"+DoubleToStr(cci[0],3)。
string s2="cci-1 ***"+DoubleToStr(cci[1],3)。
string s3="cci-2 ***"+DoubleToStr(cci[2],3)。
string str[3];
str[0]=s1。
str[1]=s2。
str[2]=s3。
color col=Lime;
for(int y=0;y<3;y++)
{ObjectCreate("textSignal "+y,OBJ_LABEL,0,0,0,0)
ObjectSet("textSignal "+y,OBJPROP_CORNER,1)。
ObjectSet("textSignal "+y,OBJPROP_XDISTANCE,35-25)。
ObjectSet("textSignal "+y,OBJPROP_YDISTANCE,y*(20)+20+8)。
如果(cci[y]>=0)col=Lime;否则col=Red。
如果(cci[y]>Level_0) col=Aqua。
如果(cci[y]<-Level_0) col=DarkViolet;
ObjectSetText("textSignal "+y,str[y],15, "Tahoma",col);
}
*/
如果(ci0>Level_0 && cci1>Level_1 && cci2>Level_2){buf0[sh]=1;
if (per != Time[0]) {per = Time[0];
如果(sh<=ExtBars &&ExtBars!=-)
Alert(Symbol(),Period()," ",
TimeYear(Time[sh])," 。
TimeDay(Time[sh])," 。
TimeMonth(Time[sh])," 。
TimeHour(Time[sh])," :" 。
TimeMinute(Time[sh])," 。
"购买");}}
如果(ci0<-Level_0 && cci1<-Level_1 && cci2<-Level_2){buf0[sh]=-1。
if (per != Time[0]) {per = Time[0];
如果(sh<=ExtBars &&ExtBars!=-)
Alert(Symbol(),Period()," ",
TimeYear(Time[sh])," 。
TimeDay(Time[sh])," 。
TimeMonth(Time[sh])," 。
TimeHour(Time[sh])," :" 。
TimeMinute(Time[sh])," "。
"销售");}}
}
}
//+------------------------------------------------------------------+
你自己试试吧,我根本就搞不定它。这根本就没有用。
线条应该是一致的。但在实践中,情况有些不同。
能否请你告诉我可能出了什么问题?
我做了一个递归函数,把一个值写到缓冲区。
当从指示器中调用时工作正常,当我试图把它放在EA中时,答案是0。
问题可能是什么?
能否请你告诉我可能出了什么问题?
我做了一个递归函数,把一个值写到缓冲区。
当从指示器中调用时工作正常,当我试图把它放在EA中时,答案是0。
问题可能是什么?
也许缓冲区的大小没有设置!?
我找到了搭讪发生的地方。
事实证明,IndicatorCounted 在指标中给出了0,而在专家顾问中给出了-1(这个函数有正确性检查-->=0,因此在专家顾问中不考虑它)。
原因是什么,如何解决这个错误?
MT4构建225,eurusd M1。
我找到了搭讪发生的地方。
事实证明,IndicatorCounted 在指标中给出了0,而在专家顾问中给出了-1(这个函数有正确性检查-->=0,因此在专家顾问中不考虑它)。
原因是什么,如何解决这个错误?
MT4构建225,eurusd M1。
https://docs.mql4.com/ru/customind
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
if (k>k1+7 && s<(High[1]-(High[1]-Low[1])/2) && bay==true)
{
int t=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,NULL,NULL,"My order #",16384,0,Green);
bay=false;
Print (GetLastError());
}
}
if (s>(High[0]-(High[0]-Low[0])/2) && bay==false)
{
OrderSelect(t,SELECT_BY_TICKET,MODE_TRADES);
Print (GetLastError());
OrderClose(t,0.1,Ask,5,Red);
}
开盘和收盘发生在不同的时间点上。而专家顾问不再记得曾经分配给变量t的内容。要么就应该是全局的,要么就是静态的。
一个全局变量是在函数之外定义的。 或者可以将其声明为静态int
开盘和收盘发生在不同的时间点上。而专家顾问不再记得曾经分配给变量t的内容。要么就应该是全局的,要么就是静态的。
一个全局变量是在函数之外定义的。 或者可以将其声明为静态int
非常感谢,我忘了))。
在我设定的指标中(然后将它们与Time[i]进行比较)。
然后在循环中
因此,StrToTime(StartRange) 和StrToTime(EndRange) 产生零 。
- 为什么以及如何解决这个问题?