int ORDtype=-1, ORDtime=0;double ORDprofit;for(int i=OrdersHistoryTotal()-1; i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderCloseTime()!=0&&OrderCloseTime()> ORDtime){
ORDtime=OrderCloseTime();
ORDtype=OrderType();
ORDprofit=OrderProfit();}}}}//........if( ORDtype==-1){// В истории не нашлось подходящих ордеров}if( ORDtype==OP_SELL){// Последним был закрыт Sell}
if( ORDtype==OP_BUY){// Последним был закрыт Buy}
//+------------------------------------------------------------------+// Проверка последнего ордера по условию |//+------------------------------------------------------------------+bool LastCloseOrd(string Sy ="",//Если Sy=="" на принадлежность символу не проверяемint Type =-1,//Если Typ==-1 любой тип ордераint Magic =-1,//Если Magic=-1любой магикint Pr_Ls =0){//Если Pr_Ls =0 без проверки на профит, если <0 то фильтр лосевых , если >0 то фильтр профитных ордеровint time=0;if(OrdersHistoryTotal()<1){return(false);}//Если нет закрытых ордеров выходим for(int i=0; i<OrdersHistoryTotal(); i++){//Перебираем закрытые ордераif(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){//Выбираем ордер из историиif(OrderCloseTime()!=0){//Если ордер уже закрытif( Sy==""||OrderSymbol()== Sy){//если совпадает символ, или нет проверки на символif( Type==-1||OrderType()== Type){//если совпадает тип, или нет проверки на типif( Magic==-1||OrderMagicNumber()== Magic){//если совпадает магик , или не проверки на магикif(OrderCloseTime()> time){//если время закрытия ордера больше чем предыдущее
time=OrderCloseTime();//записываем время закрытия (в конце цикла у нас в ловушке булет сидеть последний закрытый ордер} //попадающий под все условия выставленных фильтров)}}}}}}if( Pr_Ls==0&&time!=0){return(true);}//если нет условия на профит-лосс подтверждаем наличие ордераif( Pr_Ls<0&&OrderProfit()<0){return(true);}//если ордер лосевый подтверждаем наличие ордераif( Pr_Ls>0&&OrderProfit()>0){return(true);}//если ордер профитный подтверждаем наличие ордераreturn(false);//нет ни одного попадающего под выставленные условия ордера}
我稍后会发布一段我的代码,但我认为用复选框会更酷。我如何在mql4中写它们?
https://book.mql4.com/ru/variables/arrays
在这一节的末尾,通过形成一个新酒吧的事实的例子,很好地描述了使用旗帜的原则。同样,我们创建了两个bool类型的变量,它们将表示打开某种类型的交易的可能性,例如Buy_Allowed和Sell_Allowed。默认情况下,我们为这些变量赋值为true。如果有一个买入信号,在开仓成功的情况下,我们设置Buy_Allowed=false;在这种情况下,在OrderSend()之前,我们添加其执行买入交易的条件,只有当Buy_Allowed=true。当收到一个反向信号时,我们会丢弃Buy_Allowed=true标志。卖出交易也使用同样的方案,但有Sell_Allowed标志。
https://book.mql4.com/ru/variables/arrays
在这一节的末尾,通过形成一个新棒的事实的例子,很好地描述了使用旗子的原则。以此类推,我们创建两个bool类型的变量,表示允许开启某种类型的交易,例如Buy_Allowed和Sell_Allowed。默认情况下,我们为这些变量赋值为true。如果有一个买入信号,在开仓成功的情况下,我们设置Buy_Allowed=false;在这种情况下,在OrderSend()之前,我们添加其执行买入交易的条件,只有当Buy_Allowed=true。当收到一个反向信号时,我们会丢弃Buy_Allowed=true标志。卖出交易也使用同样的方案,但有Sell_Allowed标志。
谢谢你。我在上一个帖子中发布了一些代码。
我已经从这个网站下载了我的Daydream EA。当我测试时,在测试中采取的最大手数是0.1,余额是10,000。 我在Meta Trader 4 222中用GBPUSD 15测试。
第二个问题:测试报告中的 "不匹配错误 "是什么?
第三个问题,为什么我得不到信号? 我的印象是,这与第一个问题有某种联系,也就是说,程序中出现了故障。 我使用欧元兑美元M1的MACD样本(作为标准配置),我把MACD的OpenLevel降到了1,但什么也没有得到。
我不知道如何使用它。
谢谢你,我将教育自己。我在上一个帖子中发布了一些代码。
你的代码的工作版本。你不应该去掉检查(OrderCloseTime()>time),因为没有这个检查,整个意义就不存在了--我们正在选择最新关闭的订单,将每个被搜索的订单的关闭时间与之前找到的订单中最旧的时间进行比较。你也有一个关于ORDprofit的条件,但你可以自己添加。:)
是的,我有一个条件,如果上一个订单有利润,则禁止在同一方向开仓 :)
非常感谢!))
第二个问题:什么是测试报告中的 "差异性错误"?
已经问过很多次了,对你来说,搜索起来比较容易...
我试着在Meta Trader 4 222上使用GBPUSD 15。 有趣的是,在另一台电脑上用1手的测试也很好。 有什么诀窍吗?
也许另一台电脑上的MT4连接到另一个经纪商的账户,不同的经纪商,不同的交易条件...或者是EA随机决定的批次?)你可能需要专家顾问的代码,语句,你会得到一个准确的答案。
我的印象是,这与第一个问题有某种联系,即程序中出现了故障。 我试图使用欧元兑美元M1 MACD样本(作为标准配置),我将MACD OpenLevel降至1,但没有得到任何结果。
看看测试员的日志,如果你说的是一个测试员的话。发布参数集,以及测试EA的结果(没有信号的地方)。看来,你所有的离合器都来自于缺乏经验,而不是来自于程序中的故障。
一个选择:
当你开始交易时,将bool变量NeedAlert设置为true。谢谢你,我以为它不会起作用--就像循环不会起作用一样--事实证明我忘记了大括号))
谢谢你,我将教育自己。我在上一个帖子中发布了一些代码。
这是关于测试器中的错误.........。
如果有人知道,请告知.....
数字64.37和65.37是什么意思????????????