int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>0)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
在订单计数的条件下,如果手数超过1(Lts>1),手数就不会被关闭。
int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>1)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в валюте депозита |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double GetProfitOpenPosInCurrency(string sy="",int op=-1,int mn=-1){double p=0;int i, k=OrdersTotal();if( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()== sy || sy=="")&&( op<0||OrderType()== op)){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn<0||OrderMagicNumber()== mn){
p+=OrderProfit()+OrderCommission()+OrderSwap();}}}}}return( p);}
Kombat 17.07.2009 22:13
加起来,得到买入-夏季3手,并反击这个量卖出3手
.......................
作为一种选择,是的。不过,如果已经有开放的卖出订单,EA可能关闭的不是你需要的订单。它应该被解决了。
kombat 17.07.2009 22:13.
但要回答你的问题:是否有可能关闭所有头寸?
是的,一个接一个,它是快速脚本,AAP!就这样......
.........................
这就是我现在正在使用的东西。一组脚本--你使用这个和那个...但我试图将我的策略编码到专家顾问中,遇到了一些困难。
我有一些东西在这里不起作用,这意味着它没有关闭没有错误。
在ClosePositions()函数中,其b-Positions.mqh库中,KimIV使用了对其另一个ClosePosBySelect()函数的调用,在测试器中禁止使用ee。
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
对于历史测试,使用他的库b-ForTest.mqh
在ClosePositions()函数中,其b-Positions.mqh库中,KimIV使用了对其另一个函数ClosePosBySelect()的调用,这禁止了在测试器中使用ee。
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
对于历史测试,使用他的库b-ForTest.mqh
你误解了我的代码...翻译成俄语...如果它不在测试模式中,并且(EA不允许交易或专家顾问被停止),那么就打破循环。简单地说,当你按下工具栏上的 "Expert Advisors "按钮时,这一行可以确保从循环中退出。
晚上好。
不幸的是,阵列中也有一个差异......当订单计数时,如果手数大于0(Lts>0),手数会被逐一关闭(当达到利润时),但总利润应被考虑在内。
在订单计数的条件下,如果手数超过1(Lts>1),手数就不会被关闭。
请告知谁能看到这个错误。
或者说,伊戈尔,我对使用你的函数有误解?
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); //调用函数
Igor,请告诉我如何将你的PriceOpenLastPos函数插入指标中。
编译时,编辑器在第一个括号和随后的变量上给出错误。
double PriceOpenLastPos( string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0;
int k=OrdersTotal();
如果(sy=="0")sy=符号();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==sy || sy=="){
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime() ){
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}
return(r);
}
}
'(' - 函数定义意外 D:\MT4\experts\indicators\Astrea.mq4 (627, 24)
'sy' - 变量未定义 D:\MT4\experts\indicators\Astrea.mq4 (632, 7)
等等。
我在一个指标中实现了交易信号形成的逻辑,并通过一个全局变量 将生成的信号发送给专家顾问,以打开/关闭订单。
我需要一个订单的开盘价来做一些决定,所以我正在努力解决这个问题。我的指标是一个动态指标,它只能在演示模式或测试器的可视化模式下进行调试。
情况是,考虑的不是总利润,而是单个订单的利润。
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); //函数调用
参数传入函数不正确。它应该是这样的。
BuyOrdProf=GetProfitOpenBuyPosInCurrency("", OP_BUY);参数传入函数不正确。它应该是这样的。
在函数调用中为符号添加绑定并没有帮助。为什么它分别计算每个头寸的利润(如上图)?