//---------------------------------------------------------------int Handle, // File descriptor
Qnt_Symb; // Number of recorded symbolsstring File_Name="check.csv"; // File name
Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE|FILE_READ,";");//File opening File opened here, outside the loopFileWrite(Handle,"Ticket","Magic","OTime","Type","Lots","Symbol","OPrice","S/L","T/P");
for(int iPos = OrdersTotal()-1; iPos >= 1 ; iPos--)
{
OrderSelect(iPos,SELECT_BY_POS);
FileWrite(
Handle,
OrderTicket(), //intOrderMagicNumber(), //intTimeToStr(OrderOpenTime()), //datetime // this is a string - Time to StringOrderLots(), //doubleOrderSymbol(), //stringOrderOpenPrice(), //doubleOrderStopLoss(), //doubleOrderTakeProfit(), //doubleTimeToStr(OrderCloseTime() ) //int // this is a string - Time to String
) ; //end file writeFileClose(Handle); // why close the file inside the loop when it was opened outside the loop ?
}
} // what is this code inside of ?
} // end of start//---------------------------------------------------------------
基本上我在一个特定的时间设置了两个挂单,具体是23:00 GMT+2我想。其中一个挂单是卖出止损,另一个是买入止损,两个订单离23:00蜡烛图的开盘点位有相同的距离,在这种情况下是14点。两个订单都有28点的获利空间(在这种情况下)和55点的止损空间。
现在,当两个订单都完成时(基本上在订单到期前,从23:00蜡烛的开盘价开始上涨和下跌14点),我希望两个订单的获利 增加,例如,20点。因此,在这种情况下,他们的新获利是58点。但是止损应该始终保持不变。从本质上讲,我想做的是某种对冲的事情。
如果有两笔交易,那么价格很可能会朝一个方向走,如果两笔交易的获利增加,就足以抵消任何损失。为了获得任何利润,只有一个交易开仓并达到止盈,或者两个交易都开仓并达到止盈,而不向一个方向走得太远。
我希望这很清楚,如果不清楚,我将提供一张图片,应该会更清楚。
我指的是你之前的帖子
这里是整个EA的修订代码。
我希望这很清楚,如果不清楚,我会提供一张图片,应该更清楚。
很清楚,谢谢你。
所以你只是想修改一次这些订单......那么答案很简单。你需要检查 23:00栏,确定订单应该在哪个TP开仓 ... ...如果订单在同一个TP,那么它们需要修改,如果它们不在同一个TP,那么它们已经被修改过了,不需要再修改 ... ...很简单。
这很清楚,谢谢你。
所以你只想修改一次这些订单 ......那么答案很简单。你需要检查23:00栏,并确定订单应该在哪个TP开仓 . . . 如果订单在同一个TP,那么它们需要修改,如果它们不在同一个TP,那么它们已经被修改了,不需要再修改 . . . 很简单。
因此,从本质上讲,如果有两笔交易(相同的符号和神奇的数字),EA应该检查未平仓交易的获利 与先前存在的挂单(现在已经执行)相比,然后如果它们是相同的,它应该被改变,一旦它循环,它将再次检查,发现它们不相同,因此不会进一步修改交易?
1. 1.修改和检查应该只在有两笔交易的情况下发生,我应该如何做呢?我应该在我已经有的代码上添加还是重新开始?
2. 因此,从本质上讲,如果有两笔交易(相同的符号和神奇的数字),EA应该检查未平仓交易的获利与先前存在的挂单(现在已经执行)进行比较,然后如果它们相同,应该进行修改,一旦循环,它将再次检查并发现它们不相同,因此不会进一步修改交易?
1. 循环检查未平仓订单,检查符号和神奇数字,当你有一个不是挂单类型 的匹配时,增加一个计数器 ... ...当你通过检查订单,如果你有2个,那么你有2个正确的符号和神奇数字的未平仓订单 ... ...所以现在你可以修改它们 ...见2。
2. 不,如果挂单已经被激活,现在不再是挂单,你就不能看到挂单的TP。 EA应该检查23:00条,并计算出原来的TP是 多少 ... ...然后将其与2个未结订单的TP进行比较 ... ...根据这些信息,可以决定是否进行修改。
1. 循环检查未平仓订单,检查符号和神奇数字,当你有一个不是挂单类型的匹配时,增加一个计数器 ... ...当你通过检查订单,如果你有2个,那么你有2个正确的符号和神奇数字的未平仓订单 ... ...所以现在你可以修改它们 ...见2。
2. 不,如果挂单已经被激活,现在不再是挂单,你就不能看到挂单的TP。 EA应该检查23:00条,并计算出原来的TP是 多少 ... ...然后将其与2个未结订单的TP进行比较 ... ...根据这些信息,可以决定是否进行修改。
啊,我明白了,我相信这就是我一直以来想做的事情。到目前为止,有一个订单被修改了(特别是买入订单,在我的测试中是订单2),但它一直在被修改,我是否要用'中断'来阻止它的重复出现?另外,我如何计算并只修改未结订单,当且仅有两个订单未结时?我一直想用OrdersTotal()来做这个,但是没有成功,我想我不需要为每个订单做两段独立的代码,对吗?
只有偶数的未结订单被修改,就像我说的,它们反复被修改,我已经尝试了OrderSelect()的各种组合,但我还是想不通,就像我说的,我在MQL方面完全是个新手,这个EA已经非常接近完成,所以我想完成它。我读过这个https://book.mql4.com/trading/ordermodify,这与我的情况有什么关系吗?它是用来止损的,但我需要它来获取利润。
我在这里做错了什么?
我如何去检查TP是否与23:00的蜡烛相同?有必要这样吗,因为只要在有2个未平仓的订单时进行修改,就能达到同样的效果?或者这只是为了阻止订单不断被修改,是的,我已经检查了文件。
谢谢。
madmax3
你的return(0)是在第二个订单被修改之前把你带出start()。
你所做的是通过位置选择订单,检查它有正确的魔法号码,检查它是正确的符号,检查它是OP_BUY ... ...然后你修改它,你在哪里确定它是否已经被修改?
你的EA必须能够从中断中恢复 ......如果你的订单被放置,MT4崩溃,它必须能够在重新启动时从它离开的地方恢复。
这就是为什么你需要确定订单是否已经被修改或需要被修改 ......如何?
"我在一个特定的时间设置了两个挂单,具体是23:00 GMT+2我想。其中一个挂单是卖出止损,另一个是买入止损,两个订单离23:00蜡烛的开盘点位有相等的距离,在这种情况下是14点。两者的止盈都是28点(在这种情况下),止损是55点"。
你可以通过参考23:00的蜡烛来计算原始TP的位置,检查订单,看看它是否仍然设置为原始TP,如果是,那么它可以被修改 ...如果不是,那么它已经被修改,所以不要再修改它。
还有其他方法可以记录订单被修改的情况,跟踪票据号,当它被修改时将信息写入文件,当你要再次修改它时,打开文件并检查票据号,等等。 我认为检查与原始TP相比,要简单得多。
到目前为止,我有这个。
上文中包含的文件编写代码是。
但我得到了这些错误。
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2: FileOpen - too manyopened files
2012.04.04 15:30:06 2012.01.16 06:25 TimeBasedEA Version 2: invalid handle -1 in FileWrite
这是怎么回事?
你到底为什么要选择这两个选项中最难的一个?
当你完成对文件的写入后,你需要关闭它 ......如果它已经打开了,你不需要再打开它。
你的for循环是错误的 ......最后的顺序位置是0 而不是1
你到底为什么要选择这两个选项中最难的一个?