[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 1121 1...111411151116111711181119112011211122112311241125112611271128...1145 新评论 dzhini 2011.01.10 22:49 #11201 白天/晚上好 我试图用这种原始的方法来逆转交易,但这种方法不起作用(专家顾问按点计算)。 if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // 确定是否有买单 && 是否有蜡烛收盘价低于低位 { CheckForClose(); // 关闭订单。 OpenSell(); // 打开一个卖出 订单 返回。 } 请告知我哪里做错了?我也很感谢那些能让我弥补这一差距的链接。 --- 2011.01.10 23:05 #11202 dzhini: 我正试图用这种原始的方式进行反向交易,但这并不奏效(专家顾问按点计算)。 如果(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) //它检查是否有买入订单&&如果蜡烛收于底部水平以下。 在这个函数中,你可能会计算所有的订单。 Naomi 2011.01.11 06:45 #11203 我如何确定时间1和时间2之间有多少分钟? datetime Time_1 = D'2011.01.12 13:30'; datetime Time_2 = D'2011.01.05 10:30'; минут = Time_1- Time_2 dzhini 2011.01.11 08:52 #11204 sergeev: 这可能是你计算所有订单的函数。这应该是购买 。 这是一个标准函数。 int CalculateCurrentOrders(string symbol){int buys=0,sells=0。for(int i=0;i<OrdersTotal();i++){如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA){如果(OrderType()==OP_BUY) buys++;如果(OrderType()==OP_SELL) sells++;}} if(buys>0) return(buys)。否则返回(-sells)。} 如果>0则为买单,如果<0则为卖单 )))) [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. "完美 "的交易系统 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 --- 2011.01.11 09:17 #11205 Eliza: 我如何确定时间1和时间2之间有多少分钟? 的差值,返回秒数。 除以60,就得到了分钟数。 dzhini 2011.01.11 10:30 #11206 逆转交易。改变了专家顾问的结构 - 删除了功能。如何在特定条件下使其在一根蜡烛上收盘和开盘。 extern double TP = 70; //takrofit extern double SL = 0; //stoploss extern double Lot = 0.1; double HighLevel; double LowLevel; int resBuy=0; int resSell=0; //+ //| expert initializationfunction| //+ ------------------------------------------------------------------+ int init() { HighLevel=High[1]; LowLevel=Low[1]; return; } //+------------------------------------------------------------------+ //|专家函数 | //+------------------------------------------------------------------+ void start() { if(Bars<100 && IsTradeAllowed()==false) return; if(resBuy==0 && resSell==0 && CheckBreak() ==-) { resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red); HighLevel=LowLevel; LowLevel=Close[1]; return; } if(resBuy==0 && resSell==0 && CheckBreak()==-& CheckBreak()==1) { resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask+TP,",MAGICMA,0,Blue); LowLevel=HighLevel; HighLevel=Close[1]; return; } if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘 { bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue); // while(! IsTradeAllowed()Sleep(100); resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red); HighLevel=LowLevel; LowLevel=Close[1]; return; } if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘 { bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red); // while(! IsTradeAllowed() Sleep(100); resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue); LowLevel=HighLevel; HighLevel=Close[1]; return; } //----------------------------------------------------------------- Check Low&。High break (Func) double CheckBreak() { double candle=Open[1]-Close[1]; if(candle>0 && Low[1]<LowLevel) return(-1); if(candle<0 && High[1]>HighLevel) return(1); } [WARNING CLOSED!] Any newbie [Archive!] Any rookie question, [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. Naomi 2011.01.11 11:05 #11207 sergeev: 差异返回秒数。 除以60,就可以得到分钟数。 我只是得到日期1971.03.04 12:00,也许这需要转换? extern datetime Time_1 = D'2011.01.12 13:30'; extern datetime Time_2 = D'2011.01.05 10:30'; bool Commentari = true; int start() { if (Commentari){ Comment( "\n Дата = " + TimeToStr((Time_1-Time_2)/60)," минут", "\n==============================");} return(0); } --- 2011.01.11 11:08 #11208 Eliza: 我只是得到了日期,也许它需要被转换? 首先,你为什么要乘以60? 第二 - 如果你想把分钟数显示为一个时间,如00:15。 你不需要除以或乘以60。 Naomi 2011.01.11 11:24 #11209 sergeev: 首先,你为什么要乘以60? 第二--如果你想在屏幕上把分钟数表示成一个时间,比如00:15。 你不需要除以或乘以60。 是的,我纠正了分部,但年份是1970.01.01 02:51 我不需要它的屏幕,我只想找到没有日期的分钟数,对于那个时间间隔....。 即使不进行除法,也会输出日期,还是应该减去函数所依据的日期? datetime 是日期和时间,是一个无符号的整数,包含1970年1月1日0时以来的秒数。 extern datetime Time_1 = D'2011.01.12 13:30'; extern datetime Time_2 = D'2011.01.05 10:30'; datetime me_2 = D'1970.01.01 00:00'; bool Commentari = true; int start() { if (Commentari){ Comment( "\n Дата = " + TimeToStr(me_2-(Time_1-Time_2))," минут", "\n==============================");} return(0); } 如果我减去日期1970.01.01 02:51,它就会抛出无效的时间,我只需要从这个时间间隔中得到的分钟数,如果它在这个间隔中的25000分钟,我需要这个数字25000......类似的东西( 还是不可能通过μl语言得到这个? --- 2011.01.11 11:48 #11210 如果你只是想要一个分钟数,你完全没有理由使用TimeToStr 时间是一个正常的int数字。 或者,只使用TimeToStr 的TIME_MINUTE 标志。 1...111411151116111711181119112011211122112311241125112611271128...1145 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
白天/晚上好
我试图用这种原始的方法来逆转交易,但这种方法不起作用(专家顾问按点计算)。
if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // 确定是否有买单 && 是否有蜡烛收盘价低于低位
{
CheckForClose(); // 关闭订单。
OpenSell(); // 打开一个卖出 订单
返回。
}
请告知我哪里做错了?我也很感谢那些能让我弥补这一差距的链接。
dzhini:
我正试图用这种原始的方式进行反向交易,但这并不奏效(专家顾问按点计算)。
如果(CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) //它检查是否有买入订单&&如果蜡烛收于底部水平以下。
我如何确定时间1和时间2之间有多少分钟?
这可能是你计算所有订单的函数。这应该是购买 。
这是一个标准函数。
int CalculateCurrentOrders(string symbol)}
如果>0则为买单,如果<0则为卖单 ))))
我如何确定时间1和时间2之间有多少分钟?
的差值,返回秒数。
除以60,就得到了分钟数。
extern double TP = 70; //takrofit
extern double SL = 0; //stoploss
extern double Lot = 0.1;
double HighLevel;
double LowLevel;
int resBuy=0;
int resSell=0;
//+
//| expert initializationfunction|
//+ ------------------------------------------------------------------+
int init()
{
HighLevel=High[1];
LowLevel=Low[1];
return;
}
//+------------------------------------------------------------------+
//|专家函数 |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(resBuy==0 && resSell==0 && CheckBreak() ==-)
{
resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resBuy==0 && resSell==0 && CheckBreak()==-& CheckBreak()==1)
{
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask+TP,",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
if(resBuy!=0 && resSell==0 && Close[1]<LowLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘
{
bool closeBuy=OrderClose(resBuy, Lot, Bid, 2, Blue);
// while(! IsTradeAllowed()Sleep(100);
resSell=OrderSend(Symbol(,OP_SELL,Lot,Bid,2,0,Bid -TP,"",MAGICMA,0,Red);
HighLevel=LowLevel;
LowLevel=Close[1];
return;
}
if(resSell!=0 && resBuy==0 && Close[1]>HighLevel) //------------------------------------- 对这部分感兴趣:在一个柱子上收盘和开盘
{
bool closeSell=OrderClose(resSell, Lot, Ask, 0.0002, Red);
// while(! IsTradeAllowed()
Sleep(100);
resBuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,2,0,Ask + TP,"",MAGICMA,0,Blue);
LowLevel=HighLevel;
HighLevel=Close[1];
return;
}
//----------------------------------------------------------------- Check Low&。High break (Func)
double CheckBreak()
{
double candle=Open[1]-Close[1];
if(candle>0 && Low[1]<LowLevel) return(-1);
if(candle<0 && High[1]>HighLevel) return(1);
}
差异返回秒数。
除以60,就可以得到分钟数。
我只是得到日期1971.03.04 12:00,也许这需要转换?
我只是得到了日期,也许它需要被转换?
首先,你为什么要乘以60?
第二 - 如果你想把分钟数显示为一个时间,如00:15。
你不需要除以或乘以60。
首先,你为什么要乘以60?
第二--如果你想在屏幕上把分钟数表示成一个时间,比如00:15。
你不需要除以或乘以60。
是的,我纠正了分部,但年份是1970.01.01 02:51
我不需要它的屏幕,我只想找到没有日期的分钟数,对于那个时间间隔....。
即使不进行除法,也会输出日期,还是应该减去函数所依据的日期?
如果你只是想要一个分钟数,你完全没有理由使用TimeToStr
时间是一个正常的int数字。
或者,只使用TimeToStr 的TIME_MINUTE 标志
。