比方说在60分钟均线上面只下一次?
你是说EA吗?
Yueh Kin Twang:
你是说EA吗?
对,不知道该怎样弄
你是说EA吗?
if( (iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2)<iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,2)) && (iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1)>iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,1)) ) OrderSend(........);
很多種方法 提供一種供你參考
Hung Wen Lin:
很多種方法 提供一種供你參考
刚学编程时间不长,好多东西不会。主要想的是用60分钟均线过滤,上面用5分钟上穿10分钟均线买入,结果电脑就把60分钟均线上面所有符合的买点全部给买了,
实际上最多就前面两个涨幅大点,后面的都尾巴行情,没有买入的必要。所以才有要限制次数的要求。不过还是感谢你啦,难得有几个人回答。
f800814:
刚学编程时间不长,好多东西不会。主要想的是用60分钟均线过滤,上面用5分钟上穿10分钟均线买入,结果电脑就把60分钟均线上面所有符合的买点全部给买了,
实际上最多就前面两个涨幅大点,后面的都尾巴行情,没有买入的必要。所以才有要限制次数的要求。不过还是感谢你啦,难得有几个人回答。
大家都是從不懂摸到懂的 慢慢來 跨時區的你要想一下 用我提的範例結果會不一樣的
參考一下這位大神編的邏輯
在MQL5代码库免费下载MetaTrader 4的'跨周期均线指标' ('fxmeter')指标, 2020.06.15
这个问题其实很简单,用一个全局变量,记录下每次开仓成功后的 H1小时的开盘时间,当然开仓之前也要比较下上次记录的时间与当下的H1的开盘时间。
对初学者来说,就这么搞。
最根本就是统计当下H1的开盘时间以来有没有持仓。
datetime lastOrder = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(lastOrder!=iTime(Symbol(),PERIOD_H1,0)) { int ticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,30,0.0,0.0); if(ticket>0) { lastOrder=iTime(Symbol(),PERIOD_H1,0); } } } //+------------------------------------------------------------------+
最根本就是统计当下H1的开盘时间以来有没有持仓。
input int Magic = 12345; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(TotalOrders(Magic,PERIOD_H1)==0) { //...OrderSend } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int TotalOrders(int magic,ENUM_TIMEFRAMES tf) { int cnt = 0; datetime ot = iTime(Symbol(),tf,0); for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)) { if(OrderMagicNumber()==magic && OrderSymbol()==Symbol()) { if(OrderOpenTime()>=ot) { cnt++; } } } } return(cnt); } //+------------------------------------------------------------------+
if((TimeCurrent()-lastorderclosetime())> 60*Period()*5 )//满足条件现在要开单的时间距离上次平仓单的时间超过5根K线的时间了 { //可以再开单了 } return(0); datetime lastorderclosetime()//获取历史记录中最近一单的平仓时间 { datetime ltime=0; for(int b=OrdersHistoryTotal();b>(OrdersHistoryTotal()-200);b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_HISTORY)) { if((OrderSymbol()==Symbol())) { ltime=OrderCloseTime(); break; } } } return(ltime); }网上搜到的。你试试。把5改成1就是当根K线不再下单。
Ziheng Zhuang:
最根本就是统计当下H1的开盘时间以来有没有持仓。
在此感谢各位提出的意见。以前基础太薄弱了,好多东西都不懂,这段时间恶补了一下,基本上都明白了。谢谢各位!
统计最新下单k线时间,通过时间判断当前k线上是否已经下单。