初学者的问题 MQL4 MT4 MetaTrader 4 - 页 129 1...122123124125126127128129130131132133134135136...261 新评论 [删除] 2018.03.14 00:13 #1281 你能告诉我如何在测试器中选择要测试的符号吗?int OnInit(){return(INIT_SUCCEEDED);} Ihor Herasko 2018.03.14 08:48 #1282 Nikolay Gaylis: 请告知如何在测试器中选择一个符号进行测试,在你不能。只能在设置中手动选择。 当然,在测试器中,你可以请求其他符号上的数据,但为此你必须付出足够的努力,以确保数据的同步(测试器本身不会为你这样做,因为默认情况下它只工作于一个符号)。交易的符号,不同于选定的,在一般情况下,不能。 P.S.所有这些都是针对MT4的。在MT5中,情况是不同的。 [删除] 2018.03.14 23:15 #1283 EA使用OnTimer()EventSetTimer(1)工作,我错过了很多时间。OnTick()事件不适合我,因为我同时分析了多个货币对 ...循环中的Sleep(200) 也会加载系统......该怎么办呢? sedoj88 2018.03.16 11:00 #1284 不允许反编译! Vladislav Boyko 2018.03.16 18:05 #1285 Nikolay Gaylis:专家顾问在OnTimer()EventSetTimer(1)中工作。 我错过了很多时间。OnTick()事件并不适合我,因为我同时分析几个货币对 ...循环中的Sleep(200) 也会加载系统......该怎么办呢?还有EventSetMillisecondTimer() - 它可以减少OnTimer()执行的周期性。 [删除] 2018.03.17 12:51 #1286 Vladislav Boyko:还有EventSetMillisecondTimer() - 所以你可以减少OnTimer()的周期性。谢谢,我试试... Andrei Sabitov 2018.03.17 15:51 #1287 下午好。 在测试过程中,"阵列超出范围 "的信息出现在突出的地方。它并不表明在编译过程中出现了错误。 错误的本质是什么,我们怎样才能解决它? double TD_Close=Close[1]; for (int i=2; i<=Period_bars; i++){如果(ABS_High<High[i])ABS_High=High[i]。}如果(TD_Close>ABS_High){if(OrdersTotal() <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp," ,magic,0);else newCandle = Time[0];} Questions from Beginners MQL4 How to code? [存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. Vladislav Boyko 2018.03.17 16:18 #1288 Andrey.Sabitov:下午好。在测试过程中,"阵列超出范围 "的信息出现在突出的地方。它并不表明在编译过程中出现了错误。 错误的本质是什么,我们怎样才能解决它?double TD_Close=Close[1];for (int i=2; i<=Period_bars; i++){如果(ABS_High<High[i])ABS_High=High[i]。}如果(TD_Close>ABS_High){if (OrdersTotal () <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp," ,magic,0);else newCandle = Time[0];}Period_bars 应该是<=Bars - 1 Sergei Karev 2018.03.18 11:38 #1289 你好,朋友们,请帮助我解决以下问题:我正在尝试编写一个简单的专家顾问,我遇到了以下问题:如果SL被设置为一个不同于0的值,那么交易根本无法打开,同时TP、TStop和TrailingStep功能也完全不起作用。 我应该在代码中修正什么? //+------------------------------------------------------------------+ //| MA.mq4 | //| Sergey | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "Sergey Karev" #property link "http://www.mql4.com" #property description "Moving Average sample expert advisor" //#property strict #define MAGICMA 23101987 //--- Inputs input double Lots = 0.01; // Объем лота input int SL = 0; // Stop Loss input int TP = 0; // Take profit input int TStop = 0; // Пункты input int TrailingStep = 0; // Шаг TS в пунктах input int MA_per1 = 5; // MA быстрая input int MA_per2 = 55; // MA медленная input int Timeframe = 60; // Таймфрейм input double MaximumRisk = 0.02; input double DecreaseFactor = 3; input int MovingShift = 0; // Cдвиг средней input int Shift = 0; // Сдвиг баров input int Magic_number = 1987; // Если Magic = 0, то работает + ручные ордеры bool TSProfitOnly = true; int NumberOfTry = 5; bool UseSound = True; string NameFileSound = "expert.wav"; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //--- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //--- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //--- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //--- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //--- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma1; double ma2; int res; //+------------------------------------------------------------------+ //| Приводим SL и TP к единым целым | //+------------------------------------------------------------------+ double sl=0, tp=0; sl=NormalizeDouble(SL*Point(),_Digits); tp=NormalizeDouble(TP*Point(),_Digits); //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma1=iMA(NULL, Timeframe, MA_per1, MovingShift, MODE_SMMA, PRICE_CLOSE,Shift); ma2=iMA(NULL, Timeframe, MA_per2, MovingShift, MODE_SMMA, PRICE_CLOSE,Shift); // имя символа, таймфрейм, период, сдвиг средней, метод усреднения, тип цены, сдвиг //--- sell conditions if(ma1 < ma2) //[1] - номер свечи { res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",MAGICMA,0,Red); return; } //--- buy conditions if(ma1 > ma2) { res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",MAGICMA,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma1; double ma2; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma1=iMA(NULL,Timeframe,MA_per1,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); ma2=iMA(NULL,Timeframe,MA_per2,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); //--- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(ma1 < ma2) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(ma1 > ma2) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //+------------------------------------------------------------------+ //| Trailing Stop / Step | //+------------------------------------------------------------------+ double tr=0, ts=0, op=0, sl=0, ask=NormalizeDouble(Ask,_Digits), bid=NormalizeDouble(Bid,_Digits); tr=NormalizeDouble(TStop*Point(),_Digits); ts=NormalizeDouble(TrailingStep*Point(),_Digits); // Приводим к единым величинам (включая центовые счета) double ma2 = iMA(NULL,Timeframe,MA_per2,MovingShift,MODE_SMMA,PRICE_CLOSE,Shift); for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==Magic_number) // Если Magic = 0, то работает + ручные ордеры { op=NormalizeDouble(OrderOpenPrice(),_Digits); sl=NormalizeDouble(OrderStopLoss(),_Digits); if(OrderType()==OP_BUY) { if((bid-op)>tr) if((bid-sl)>tr) if((bid-tr)>ma2) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ma2,_Digits),OrderTakeProfit(),0, clrGreen)==false) Print("Error BUY OrderModify"); } if(OrderType()==OP_SELL) { if((op-ask)>tr) if((sl-ask)>tr || sl==0) if((ask+tr)<ma2) if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(ma2,_Digits),OrderTakeProfit(),0, clrGreen)==false) Print("Error SELL OrderModify"); } } } } } } //+----------------------------------------------------------------------+ MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader www.mql4.com MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader Nikolai Semko 2018.03.18 13:08 #1290 Sergey_M_K:你好,朋友们,请帮助我解决以下问题:我正在尝试编写一个简单的专家顾问,我遇到了以下问题:如果SL被设置为一个不同于0的值,那么交易根本无法打开,同时TP、TStop和TrailingStep功能也完全不起作用。 我应该在代码中修正什么? 你是否使用调试器来搜索错误? 1...122123124125126127128129130131132133134135136...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
请告知如何在测试器中选择一个符号进行测试,在
你不能。只能在设置中手动选择。
当然,在测试器中,你可以请求其他符号上的数据,但为此你必须付出足够的努力,以确保数据的同步(测试器本身不会为你这样做,因为默认情况下它只工作于一个符号)。交易的符号,不同于选定的,在一般情况下,不能。
P.S.所有这些都是针对MT4的。在MT5中,情况是不同的。
不允许反编译!
专家顾问在OnTimer()EventSetTimer(1)中工作。 我错过了很多时间。OnTick()事件并不适合我,因为我同时分析几个货币对 ...循环中的Sleep(200) 也会加载系统......该怎么办呢?
还有EventSetMillisecondTimer() - 它可以减少OnTimer()执行的周期性。
还有EventSetMillisecondTimer() - 所以你可以减少OnTimer()的周期性。
谢谢,我试试...
下午好。
在测试过程中,"阵列超出范围 "的信息出现在突出的地方。它并不表明在编译过程中出现了错误。 错误的本质是什么,我们怎样才能解决它?
double TD_Close=Close[1];
for (int i=2; i<=Period_bars; i++)
{
如果(ABS_High<High[i])ABS_High=High[i]。
}
如果(TD_Close>ABS_High)
{
if(OrdersTotal() <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp," ,magic,0);
else newCandle = Time[0];
}
下午好。
在测试过程中,"阵列超出范围 "的信息出现在突出的地方。它并不表明在编译过程中出现了错误。 错误的本质是什么,我们怎样才能解决它?
double TD_Close=Close[1];
for (int i=2; i<=Period_bars; i++)
{
如果(ABS_High<High[i])ABS_High=High[i]。
}
如果(TD_Close>ABS_High)
{
if (OrdersTotal () <= 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,3,sl,tp," ,magic,0);
else newCandle = Time[0];
}
Period_bars 应该是<=Bars - 1
你好,朋友们,请帮助我解决以下问题:我正在尝试编写一个简单的专家顾问,我遇到了以下问题:如果SL被设置为一个不同于0的值,那么交易根本无法打开,同时TP、TStop和TrailingStep功能也完全不起作用。
我应该在代码中修正什么?
你好,朋友们,请帮助我解决以下问题:我正在尝试编写一个简单的专家顾问,我遇到了以下问题:如果SL被设置为一个不同于0的值,那么交易根本无法打开,同时TP、TStop和TrailingStep功能也完全不起作用。
我应该在代码中修正什么?