datetime current, last=0;
int shift=1;
voidOnTick()
{
current=iTime(symbol,frame,shift);
//ограничение на торговлю вне начала бараif(last==current) return;
last=current;
}
关于第三点。
//трейлинг рыночных ордеров, стоплосс держится на расстоянии Distance от самой экстремальной тени из последних History баров int DoTrailOrder(int ePosition, int eMagicNumber, double eDistance, int eHistory, string eSymbol, int eTimeFrame)
{
if(!OrderSelect(ePosition,SELECT_BY_POS,MODE_TRADES)) return(1);
int eType=OrderType();
if(eType!=OP_BUY && eType!=OP_SELL) return(0);
if(OrderMagicNumber()!=eMagicNumber) return(0);
if(OrderSymbol()!=eSymbol) return(0);
//наблюдаем начиная с бара следующим за баром открытияif(iBarShift(eSymbol,eTimeFrame,OrderOpenTime())==0) return(0);
int eDigits=(int)MarketInfo(eSymbol,MODE_DIGITS);
double ePoint=MarketInfo(eSymbol,MODE_POINT);
double eSpread=MarketInfo(eSymbol,MODE_SPREAD);
double eExtremum;
if(eType==OP_BUY)
{
//стоп устанавливается на расстоянии eDistance от самой низкой тени бара из истории eHistory
eExtremum=iLow(eSymbol,eTimeFrame,iLowest(eSymbol,eTimeFrame,MODE_LOW,eHistory,1));
//расстояние от минимума до StopLoss должно превысить TrailingLevelif(NormalizeDouble(eExtremum-OrderStopLoss(),eDigits)<=eDistance*ePoint) return(0);
//расстояние от минимума до цены открытия должно превысить TrailingLevelif(NormalizeDouble(eExtremum-OrderOpenPrice(),eDigits)<=eDistance*ePoint) return(0);
//новый стоп должен быть не ближе к текущей цене, чем на два спредаif(NormalizeDouble(MarketInfo(eSymbol,MODE_BID)+eDistance*ePoint-eExtremum,eDigits)<=2*eSpread*ePoint) return(0);
if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum-eDistance*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrBlue)) return(-1);
}
if(eType==OP_SELL)
{
//стоп устанавливается на расстоянии eDistance от самой высокой тени бара из истории eHistory
eExtremum=iHigh(eSymbol,eTimeFrame,iHighest(eSymbol,eTimeFrame,MODE_HIGH,eHistory,1));
if(NormalizeDouble(OrderStopLoss()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint && OrderStopLoss()!=0) return(0);
if(NormalizeDouble(OrderOpenPrice()-eExtremum,eDigits)<=(eDistance+eSpread)*ePoint) return(0);
//один спред между Ask и Bid сократилсяif(NormalizeDouble(eExtremum+eDistance*ePoint-MarketInfo(eSymbol,MODE_ASK),eDigits)<=eSpread*ePoint) return(0);
if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(eExtremum+(eDistance+eSpread)*ePoint,eDigits),OrderTakeProfit(),OrderExpiration(),clrRed)) return(-1);
}
return(0);
}
在机器人经过测试后,有可能出现正式的订单
说得很好 :)
一些变化
究竟改变了什么?
各位同事,大家好。
该主题是否仍然相关?有没有准备免费开发机器人的赞助者?
我需要一个擅长.mq4编码的助手。
我自己是个程序员,但我对mq4不是很在行。 有些问题,我要么不知道怎么描述,要么就不知道怎么解决。
我有一个简单的剥头皮策略(M15-M30)和最初编写的机器人。它需要改进。
我不会给我网站的链接,这不会被视为我的广告。
RVI 50
EMA 9
EMA 100
多头头寸的进入条件。
EMA9从下往上穿过EMA100,RVI也必须从下往上穿过零线或高于零线。如果这些条件得到满足,我们就建立一个买入头寸。 我们在最近的最低点以下2-3个点设置止损。止盈 比止损高1.5-2倍。
空头头寸的进入条件。
EMA9从上方往下穿过EMA100,而RVI指标也必须从上方往下穿过零线或低于零线。如果这些条件得到满足,我们就建立一个卖出头寸。止损 放在最接近的最大值之上。止盈 比止损高1.5-2倍。
我已经写了一个原始的机器人,但它正在失去,因为我必须修复一些不工作的东西,另外,也许有人有一些想法,如何过滤掉错误的信号?(当然他们会这样做)...
什么东西不工作,我们必须解决它。
1.止损和止盈分别被设置为固定的100和200,这些水平是不够的。我们应该从最后X个 柱子的蜡烛图集中计算出最低/最高 止损(将X 个柱子设为输入参数),并从中获取利润。 我自己不知道如何做。最重要的一点,因为机器人的失败正是因为在止损点上收盘,尽管信号是正确的,利润会更大。
2.机器人,出于某种原因,(在测试器中)在某些点位内,在同一个柱 子上打开了几个订单,即使它正在检查在同一个柱子上打开一个订单(从这个论坛借用),但它没有工作。我们必须修改检查,看看它为什么不工作。
3.当BU达到一定水平时,完成添加尾随止损(机器人的传入参数),例如,计算TP的1/2(也可以在参数中指定BU系数,例如,从0.3到0.7)。在机器人中描述了单独的尾随(代码取自该论坛),但它没有考虑到BU。此外,由于某些原因,它在策略测试器中不起作用,我需要了解原因。
4.我想增加资金管理,但我不知道怎么做。例如,禁止在一个方向上打开超过5个订单,如果有活跃的。或者在设置账户余额/权益 时禁止交易。
5.马廷戈尔。对信号进行过滤。(可选)。
这就是全部。机器人文件已经准备好,如果有兴趣合作,可以提交给个人。如果你有兴趣,我准备在私人信息中分享交易机器人的文件,如果有感兴趣的交易者。我自己也会完成,然后仍然只有1分。
我已经解决了第1项,我已经找到了如何通过iLowest/iHighest来根据条形历史计算价格的方法))在过去半年的历史中,盈利指标略有增加)在整个历史中是损失(
我还是不明白第2点。
我开始处理追踪,也许我会自己 "赢得 "它)盈利能力应该增长一些,因为有些交易有很大的收益,但价格就是达不到,并通过停止来关闭它,尽管我可以获利。
关于第二点。
关于第三点。
跟踪止损可能会增加预期,但并不能提高盈利能力。在嘈杂的市场中会有表现不佳的情况,价格会打掉一个新的跟踪止损,而如果没有这个止损,就会有更多的利润。
最好是有意地考虑关闭贸易。你在寻找开盘的信号,那么为什么要把收盘抛给套利呢?谢谢你对第2,3点的提示。 我将进行测试。
至于关闭,当然可以在相反的信号触发时关闭,我需要考虑......什么会带来更多的效果。
我想在它达到一定水平时跟踪一些东西。这将是一个缺点,但我也不想有一个大的缩减。)
谢谢
迪米特里,关于跟踪 - 这是已经被许多人不止一次测试过的信息。上面的尾部代码可能是所有代码中最好的。但它并非没有这个缺点。
试试吧,一切都必须尝试。
究竟改变了什么?
我以前在什么地方给过它。这里有更多。
谢谢你对第2,3点的提示。 我将进行测试。
至于关闭,当然可以在相反的信号触发时关闭,我需要考虑......什么会带来更多的效果。
我想在它达到一定水平时跟踪一些东西。这将是一个缺点,但我也不想有一个大的缩减。)
谢谢
市场不以点数为单位,也就是说,它不以点数为基础。它从一个级别移动到另一个级别。距离最好用趋势时间来衡量。也许是以点计算,但不是以点计算。