[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 303 1...296297298299300301302303304305306307308309310...652 新评论 oper11 2011.10.29 13:44 #3021 costy_: 有很多选项,例如,在文件中记录开放时间,但滚动浏览开放订单和比较寿命更容易。一般来说,重新 表述... 对于每个单独的头寸,"有必要在指定的时间间隔 后关闭所有未结头寸"(这是我对问题的理解)。 你答案中的 "更容易 "这个词是关键词,它意味着没有内置的这种功能。我只是想 在开仓2小时后 关闭每个 单独的头寸。 ALN 2011.10.29 13:51 #3022 costy_: 脚本不会那么容易找到测试者的时间(但指标会),你可以把测试顾问附在开始的时候 迅速和可靠地... 谢谢你。在脚本中是这样做的。 datetime time_start=GlobalVariableGet( "Time_test"); // Alert(iBarShift(NULL,0,time_start)); EndBar = iBarShift(NULL,0,time_start); 一切正常。 Александр 2011.10.29 15:09 #3023 我正在努力写一个inikator。我不明白为什么会重画。此外,它只吸取了渲染。请帮助我。我是编程新手。 #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 洋红色 #property indicator_color2 Red //---- 输入参数 外来的int N; datetime some_time=D'1971.01.11 00:00'。 datetime some_time_1=D'1971.01.11 00:00'。 //---- 缓冲区 双倍RLB_Buffer[]。 双倍RLB_Buffer_1[]。 double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1。 bool dirlong,first; int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1。 //+------------------------------------------------------------------+ //|自定义指标初始化功能 //+------------------------------------------------------------------+ int init() { string short_name; //---- 指标线 SetIndexStyle(0, DRAW_ARROW)。 SetIndexArrow(0, 159); SetIndexBuffer(0,RLB_Buffer)。 //----; SetIndexStyle(1,DRAW_ARROW)。 SetIndexArrow(1,159); SetIndexBuffer(1,RLB_Buffer_1)。 return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted()。 评论(i," ",ii)。 //---- 如果(Bars < 3) return(0); //---------- first_t_bar=iBarShift(NULL,0,some_time,false); //bars趋势向上 now_bar=iBarShift(NULL,0,TimeCurrent(),false); //最后一格,最右边。 i=counted_bars-first_t_bar+1。 //------------ first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //trend start bar now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //最后一格,最右边。 ii=计数的_条-第一_条_1+1。 // if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; // if(counted_bars), then trend start bar 如果(counted_bars == 0) { first = false。 i=first_t_bar+1。 ii=第一个_t_bar_1+1。 } //------------ //计算的负数条数 dirlong = false。 如果(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true; 如果(dirlong == true) //如果趋势是向上的 { while(i>=0) { x++; //从趋势开始的条数。 Real_Line_Balanse=Close[i+5]; //从趋势上看,慢速的总和的计数。 RLB=Real_Line_Balanse。 if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //只有在价格上涨时才显示线。 //------- 如果(RLB>Close[i]&&x>50) //如果价格从上到下越过RLB { bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//然后确定两者之间的HIGH。 //最后一根柱子和趋势的开始 some_time_1=Time[bar_high]; //下跌趋势的新开始。 x=0; //从趋势开始的小节计数器归零。 Real_Line_Balanse=0。 } i--; }//while //------- }//dirlong //--------------------- //--------------------- 如果(dirlong == false) //如果趋势是向下的 { while(ii>=0) { x1++; //从趋势开始算起的条数 Real_Line_Balanse_1=Close[ii+10]; //计算趋势的条数。 RLB_1=Real_Line_Balanse_1。 if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1。 //------- 如果(RLB_1<Close[ii]&& x1>50) //如果价格从上到下越过了RLB { bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//然后在bar_1和bar_2之间确定低点。 //最后一根柱子和趋势的开始 some_time=Time[bar_low]; //上升趋势的新起点。 x1=0; //从趋势开始的小节计数器归零。 Real_Line_Balanse_1=0。 } ii--。 } //while //------- }//dirlong //--------------------- return(0); } //+------------------------------------------------------------------+ [ARCHIVE] Any rookie question, [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 编码帮助 Александр 2011.10.29 17:56 #3024 这是无稽之谈。而不是 i=counted_bars-first_t_bar+1。 我放了一个设计,计算它自己计算的条数。一切都开始顺利运行。IndicatorCounted(); 滑行或我不明白...... --- 2011.10.29 19:42 #3025 如何通知一个已关闭订单的状态的变量? 2 vitaluxa 29.10.2011 21:26 你好! 如果一个EA开了一个订单,并在止损或止盈时关闭,我如何通知变量,该订单已经准确地在止损或止盈时关闭?提前感谢! costy_ 2011.10.29 23:25 #3026 001:这是无稽之谈。而不是 i=counted_bars-first_t_bar+1。我放了一个结构,用来计算被计数的条子本身。一切顺利。IndicatorCounted(); 滑行或我不明白...... 你用while(i>=0),所以当一个新的蜡烛出现时,i=1(以确保前一个蜡烛的数据被记录的数据计算了一次)。为什么输入some_time=D'1971.01.11 00:00';使用Bars ,IndicatorCounted对我不起作用(好吧,错误可能是由于first_t_bar)。你的算法,你应该修复它。"我是编程新手。"自2007年以来)。 Алексей Тарабанов 2011.10.30 01:39 #3027 sergeev: 如何通知一个已关闭订单的状态的变量? :) + ... 为维塔鲁哈。 https://docs.mql4.com/ru/trading/OrderStopLoss https://docs.mql4.com/ru/trading/OrderTakeProfit first_may 2011.10.30 06:33 #3028 下午好,请您告诉我为什么今年6月10日至9月22日的报价不能上传?我已经做了两到三次历史上传,都有同样的数据差距。 oper11 2011.10.30 09:29 #3029 //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Закрвает открытые позиции через 2 суток void DelOldPositions() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderOpenTime()+2*24*60*60 > TimeCurrent()) { OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4 ),3,Red); } } } } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Помогите поправить 2 последние строки, т.к. в тестере почему-то мгновенно закрывает все открытые позы. С уважением. [Deleted] 2011.10.30 10:00 #3030 问题是,EA不断地重新打开订单,即有一个买入信号--它打开了一个订单,然后在盈利时关闭了它,而条件仍然保留,它又打开了它。 我以为可以用传统的买入和卖出计数器来处理--如果买入订单已经打开,则计数器+1,在计数器为0之前不能打开新的买入,只有在关闭时计数器才会被重置。 extern double TakeProfit = 150; extern double Sl = 150; extern double Lots = 0.1; extern int n = 9; //----------------------------------------------------------- int start() { int cnt, ticket, total, i, Buy=0, Sell=0; double x1=iIchimoku(NULL,0,9,26,52,MODE_TENKANSEN,0); //красная double x2=iIchimoku(NULL,0,9,26,52,MODE_KIJUNSEN,0); //синяя double x3=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANA,0); //фиол пунктир double x4=iIchimoku(NULL,0,9,26,52,MODE_SENKOUSPANB,0); //кр пунктир double x5=iIchimoku(NULL,0,9,26,52,MODE_CHINKOUSPAN,0); //зеленая double x6=Ask; double x61=Bid; double Lot=0; total=OrdersTotal(); for (i=total-1;i>=0;i--) //счетчик выставленных ордеров { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderType()==OP_BUY) { Buy++; } if (OrderType()==OP_SELL) { Sell++; } } } if(total<1)//проверка количества ордеров { if(AccountFreeMargin()<(100*Lots)) { Print("Недостаточно средств = ", AccountFreeMargin()); return(0); } if (x6>x3 && x6>x4 && x1>x2 && x6>x2 && x6<(x2+60) && Buy==0) //бай { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Sl*Point,Ask+TakeProfit*Point,0,0,0,Green); Sell=0; // ордер и обнуление счетчика if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice()); else Print("Ошибка при открытии BUY позиции : ",GetLastError()); } } if (x6<x3 && x6<x4 && x1<x2 && x6<x2 && x6>(x2-60) && Sell==0) //селл { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Sl*Point,Bid-TakeProfit*Point,0,0,0,Red); Buy=0; //сам по себе ордер и обнуление счетчика if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice()); else Print("Ошибка при открытии SELL позиции : ",GetLastError()); } } } if((OrderType()==0 && x61<x3 && x61<x4 && x1>x2 && x1>x3 && x1>x4) || (OrderType()==1 && x61>x3 && x61>x4 && x1<x2 && x1<x3 && x1<x4)) //закрытиеи на развороте { bool result; double price; int cmd,error; //---- if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { cmd=OrderType(); if(cmd==OP_BUY || cmd==OP_SELL) { while(true) { if(cmd==OP_BUY) price=Bid; else price=Ask; result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); } else error=0; if(error==135) RefreshRates(); else break; } } } else Print( "Error when order select ", GetLastError()); //---- } } 附加的文件: robot_ichimoky3.mq4 5 kb 1...296297298299300301302303304305306307308309310...652 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有很多选项,例如,在文件中记录开放时间,但滚动浏览开放订单和比较寿命更容易。
一般来说,重新
对于每个单独的头寸,"有必要在指定的时间间隔
脚本不会那么容易找到测试者的时间(但指标会),你可以把测试顾问附在开始的时候
迅速和可靠地...
我正在努力写一个inikator。我不明白为什么会重画。此外,它只吸取了渲染。请帮助我。我是编程新手。
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 洋红色
#property indicator_color2 Red
//---- 输入参数
外来的int N;
datetime some_time=D'1971.01.11 00:00'。
datetime some_time_1=D'1971.01.11 00:00'。
//---- 缓冲区
双倍RLB_Buffer[]。
双倍RLB_Buffer_1[]。
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB, Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1。
bool dirlong,first;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1。
//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- 指标线
SetIndexStyle(0, DRAW_ARROW)。
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer)。
//----;
SetIndexStyle(1,DRAW_ARROW)。
SetIndexArrow(1,159);
SetIndexBuffer(1,RLB_Buffer_1)。
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted()。
评论(i," ",ii)。
//----
如果(Bars < 3)
return(0);
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //bars趋势向上
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //最后一格,最右边。
i=counted_bars-first_t_bar+1。
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //trend start bar
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //最后一格,最右边。
ii=计数的_条-第一_条_1+1。
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; // if(counted_bars), then trend start bar
如果(counted_bars == 0)
{
first = false。
i=first_t_bar+1。
ii=第一个_t_bar_1+1。
}
//------------ //计算的负数条数
dirlong = false。
如果(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
如果(dirlong == true) //如果趋势是向上的
{
while(i>=0)
{
x++; //从趋势开始的条数。
Real_Line_Balanse=Close[i+5]; //从趋势上看,慢速的总和的计数。
RLB=Real_Line_Balanse。
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //只有在价格上涨时才显示线。
//-------
如果(RLB>Close[i]&&x>50) //如果价格从上到下越过RLB
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//然后确定两者之间的HIGH。
//最后一根柱子和趋势的开始
some_time_1=Time[bar_high]; //下跌趋势的新开始。
x=0; //从趋势开始的小节计数器归零。
Real_Line_Balanse=0。
}
i--;
}//while
//-------
}//dirlong
//---------------------
//---------------------
如果(dirlong == false) //如果趋势是向下的
{
while(ii>=0)
{
x1++; //从趋势开始算起的条数
Real_Line_Balanse_1=Close[ii+10]; //计算趋势的条数。
RLB_1=Real_Line_Balanse_1。
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1。
//-------
如果(RLB_1<Close[ii]&& x1>50) //如果价格从上到下越过了RLB
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//然后在bar_1和bar_2之间确定低点。
//最后一根柱子和趋势的开始
some_time=Time[bar_low]; //上升趋势的新起点。
x1=0; //从趋势开始的小节计数器归零。
Real_Line_Balanse_1=0。
}
ii--。
} //while
//-------
}//dirlong
//---------------------
return(0);
}
//+------------------------------------------------------------------+
这是无稽之谈。而不是
i=counted_bars-first_t_bar+1。
我放了一个设计,计算它自己计算的条数。一切都开始顺利运行。IndicatorCounted(); 滑行或我不明白......
如何通知一个已关闭订单的状态的变量?
这是无稽之谈。而不是
i=counted_bars-first_t_bar+1。
我放了一个结构,用来计算被计数的条子本身。一切顺利。IndicatorCounted(); 滑行或我不明白......
你用while(i>=0),所以当一个新的蜡烛出现时,i=1(以确保前一个蜡烛的数据被记录的数据计算了一次)。
为什么输入some_time=D'1971.01.11 00:00';使用Bars ,IndicatorCounted对我不起作用(好吧,错误可能是由于first_t_bar)。
你的算法,你应该修复它。
"我是编程新手。"自2007年以来)。
如何通知一个已关闭订单的状态的变量?
:)
+ ...
为维塔鲁哈。
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
问题是,EA不断地重新打开订单,即有一个买入信号--它打开了一个订单,然后在盈利时关闭了它,而条件仍然保留,它又打开了它。
我以为可以用传统的买入和卖出计数器来处理--如果买入订单已经打开,则计数器+1,在计数器为0之前不能打开新的买入,只有在关闭时计数器才会被重置。