[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 286 1...279280281282283284285286287288289290291292293...1145 新评论 Monteg 2009.11.06 14:25 #2851 你好。你能告诉我,是否有一种EA可以像策略测试器 那样,在图表上标记进入和退出点? Rid 2009.11.06 15:11 #2852 而手动--这有什么错呢?用鼠标将账户历史中的交易拉到图表上,它们就会在那里显示出来! 或者使用脚本 -http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32 Дмитрий 2009.11.06 18:03 #2853 TheXpert >> : ShellExecute,命令 "打开",例如。 谢谢你 [删除] 2009.11.07 08:41 #2854 rid >> : 它应该放在外面。不是在任何功能里面 - 而是作为一个单独的、独立的功能。 你可以这样去做。 我不确定在这些条件下,EA是否会工作。因为最开始的位置将无法打开... 函数isCloseLastPosByTake()应该从买入或卖出条件中删除。 那么它就会发挥作用。 一个EA的代码,根据rid的建议进行了修正,只有开始的时候才有可能。 //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // Узнаем уровень стопов и спрэд int Spread = MarketInfo(Symbol(), MODE_SPREAD); int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Рассчитываем значения средних на 0-ом и 1-ом барах double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0); double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1); double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0); double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1); // открытие позиции Buy покупка if( MAF_1 < MAS_1 && MAF_0 > MAS_0) { if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) { if( CheckOrders(OP_SELL)) { if( StopLoss <= StopLevel+ Spread) double SL = 0; else SL = Ask - StopLoss*Point; if( TakeProfit <= StopLevel- Spread) double TP = 0; else TP = Ask + TakeProfit*Point; if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber)) Print("Не открыт ордер Buy. Ошибка №", GetLastError()); } } } //-------------------Конец покупки ----------------------- // ----- Открытие позиции Sell продажа------------ if( MAF_1 > MAS_1 && MAF_0 < MAS_0) { if( CheckOrders(OP_BUY)) { if( StopLoss <= StopLevel+ Spread) SL = 0; else SL = Bid + StopLoss*Point; if( TakeProfit <= StopLevel- Spread) TP = 0; else TP = Bid - TakeProfit*Point; if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber)) Print("Не открыт ордер Sell. Ошибка №", GetLastError()); } } } //---конец блока продажи ------------------------------ //---- return(0); }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+ //ЖЖЖЖЖЖЖ Другие вызываемые пользовательские функции ЖЖЖЖЖЖ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.05.2008 | //| Описание : Возвращает флаг закрытия | //| последней позиции по тейку. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) { datetime t; double ocp, otp; int dg, i, j=-1, k=OrdersHistoryTotal(); if ( sy=="0") sy=Symbol(); for ( i=0; i< k; i++) { if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()== sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if ( op<0 || OrderType()== op) { if ( mn<0 || OrderMagicNumber()== mn) { if ( t<OrderCloseTime()) { t=OrderCloseTime(); j= i; }} }}}}} if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo( sy, MODE_DIGITS); if ( dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2; ocp=NormalizeDouble(OrderClosePrice(), dg); otp=NormalizeDouble(OrderTakeProfit(), dg); if ( ocp== otp) return( True); } return( False); } [删除] 2009.11.07 08:43 #2855 我在编译时得到了一个错误。 2;73;C:\Program Files\MetaTrader - Alpari\experts\SimpleMA22333.mq4;103:3;'}' - unbalanced parentheses 这个地方被标记为*帮助好心人..... return(0); * }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+ Victor Nikolaev 2009.11.07 08:59 #2856 igrok2008 писал(а)>> 我在编译时得到了一个错误。 这个地方被标记为*帮助好心人..... 大括号的数量在起始函数中是不同的 //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { // Узнаем уровень стопов и спрэд int Spread = MarketInfo(Symbol(), MODE_SPREAD); int StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); // Рассчитываем значения средних на 0-ом и 1-ом барах double MAF_0 = iMA(NULL, 0, MAFP, 0, 1, 1, 0); double MAF_1 = iMA(NULL, 0, MAFP, 0, 1, 1, 1); double MAS_0 = iMA(NULL, 0, MASP, 0, 1, 1, 0); double MAS_1 = iMA(NULL, 0, MASP, 0, 1, 1, 1); // открытие позиции Buy покупка if( MAF_1 < MAS_1 && MAF_0 > MAS_0) { if( isCloseLastPosByTake( NULL, OP_SELL, MagicNumber) ==true) { if( CheckOrders(OP_SELL)) { if( StopLoss <= StopLevel+ Spread) double SL = 0; else SL = Ask - StopLoss*Point; if( TakeProfit <= StopLevel- Spread) double TP = 0; else TP = Ask + TakeProfit*Point; if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 5, SL, TP, NULL, MagicNumber)) Print("Не открыт ордер Buy. Ошибка №", GetLastError()); } } } //-------------------Конец покупки ----------------------- // ----- Открытие позиции Sell продажа------------ if( MAF_1 > MAS_1 && MAF_0 < MAS_0) { if( isCloseLastPosByTake( NULL, OP_BUY, MagicNumber) ==true) { if( CheckOrders(OP_BUY)) { if( StopLoss <= StopLevel+ Spread) SL = 0; else SL = Bid + StopLoss*Point; if( TakeProfit <= StopLevel- Spread) TP = 0; else TP = Bid - TakeProfit*Point; if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 5, SL, TP, NULL, MagicNumber)) Print("Не открыт ордер Sell. Ошибка №", GetLastError()); } } } //---конец блока продажи ------------------------------ return(0); }//+----------КОНЕЦ ФУНКЦИИ СТАРТ -------------------+ 一定发生过类似的事情。没有深入研究逻辑问题 Rid 2009.11.07 09:17 #2857 igrok2008 >> : 这里是专家顾问的代码,并根据骑士的建议进行了更正。 删除销售箱中多余的大括号。我告诉过你,开括号的数量必须与闭括号的数量相等。而你有两个支架是开放的,三个是封闭的 ! 当然也会出现编译错误。 [删除] 2009.11.07 17:04 #2858 rid >> : 删除销售箱中多余的大括号。我告诉过你,开括号的数量必须与闭括号的数量相等。但你有两个括号是开放的,三个是封闭的!这就是为什么你要把你的名字写在上面。 当然也会出现编译错误。 而开头的括号是什么???? aaaaaaaaahhhh,我知道了,这是{.........-!!!!!!!!!!!!!!}。:-))))))) 我将测试........,如果有什么问题,请不要评判,我将尝试提出问题。 Victor Nikolaev 2009.11.07 17:06 #2859 igrok2008 писал(а)>> 而开头的括号是什么???? aaaaaaaaaaaa,它是 {.........-!!!!!!!!!!!!!!:-))))))) 我将测试.........,如果有什么事,不要怪我,我会问问题。 我以为我做了一个修订。 Rid 2009.11.07 17:18 #2860 这样的修复是行不通的。它将无法开启第一笔交易。因为在你的变体中开出第一笔交易的条件是,在采取或停止时关闭任何先前的交易 即--一个恶性循环。 1...279280281282283284285286287288289290291292293...1145 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好。你能告诉我,是否有一种EA可以像策略测试器 那样,在图表上标记进入和退出点?
而手动--这有什么错呢?用鼠标将账户历史中的交易拉到图表上,它们就会在那里显示出来!
或者使用脚本 -http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=32
ShellExecute,命令 "打开",例如。
谢谢你它应该放在外面。不是在任何功能里面 - 而是作为一个单独的、独立的功能。
你可以这样去做。
我不确定在这些条件下,EA是否会工作。因为最开始的位置将无法打开...
函数isCloseLastPosByTake()应该从买入或卖出条件中删除。
那么它就会发挥作用。
一个EA的代码,根据rid的建议进行了修正,只有开始的时候才有可能。
我在编译时得到了一个错误。
这个地方被标记为*帮助好心人.....
我在编译时得到了一个错误。
这个地方被标记为*帮助好心人.....
大括号的数量在起始函数中是不同的
一定发生过类似的事情。没有深入研究逻辑问题这里是专家顾问的代码,并根据骑士的建议进行了更正。
删除销售箱中多余的大括号。我告诉过你,开括号的数量必须与闭括号的数量相等。而你有两个支架是开放的,三个是封闭的 !
当然也会出现编译错误。
删除销售箱中多余的大括号。我告诉过你,开括号的数量必须与闭括号的数量相等。但你有两个括号是开放的,三个是封闭的!这就是为什么你要把你的名字写在上面。
当然也会出现编译错误。
而开头的括号是什么????
aaaaaaaaahhhh,我知道了,这是{.........-!!!!!!!!!!!!!!}。:-)))))))
我将测试........,如果有什么问题,请不要评判,我将尝试提出问题。
而开头的括号是什么????
aaaaaaaaaaaa,它是 {.........-!!!!!!!!!!!!!!:-)))))))
我将测试.........,如果有什么事,不要怪我,我会问问题。
我以为我做了一个修订。
这样的修复是行不通的。它将无法开启第一笔交易。因为在你的变体中开出第一笔交易的条件是,在采取或停止时关闭任何先前的交易
即--一个恶性循环。