新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 402 1...395396397398399400401402403404405406407408409...1953 新评论 Roman Sharanov 2017.12.25 09:08 #4011 STARIJ: 下面是这个。鼠标点击图形对象的事件鼠标点击X坐标Y坐标发生事件的图形对象的名称呃,我想我已经明白了) 谢谢你的帮助! potom 2017.12.25 15:04 #4012 我不知道如何将结果 "r "连接到一个缓冲区以在图表上显示,请指教。我无法理解教科书中的例子,我问过别人他们写道--"将 "r "的值写入缓冲区,它就会出现在图形上。"和 "通常你通过for循环向缓冲区写入。"但这并不能说明什么!一个结果是只有字母 "r",仅此而已,我在任何地方都找不到它。还有一件事例如,如何将结果 "r "平滑化。 谢谢您的关注! ZZuretc 2017.12.25 15:13 #4013 错误是什么?当在测试器中运行时,该函数会删除挂单,有时不会。为什么?操作原理如下:当买入订单被TP平仓时,买入限价被移除。请告知////+------------------DELETE BUYLIM-----------------------------------+ if((SchBuyLimLots(Symbol())-SchBuyLots(Symbol()))!=0) // лот байлимит НЕ лот бая { for(int i=0;i<OrdersTotal();i++) { datetime T_op=0,T_lim=0,buys=0; if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) break; if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue; if(OrderType()==OP_BUY) if(OrderCloseTime()>buys) buys+=OrderCloseTime(); buys= OrderCloseTime(); T_op=buys; // время закрытия бая if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=SMB_) continue; { if(OrderType()==OP_BUYLIMIT) { T_lim=OrderOpenTime(); // время закрытия селл ticket=OrderTicket(); if(T_lim<=T_op) // разность res=OrderDelete( ticket,clrMagenta); if(res<1) { Print(GetLastError()); } } } } } Vladimir Pastushak 2017.12.25 17:37 #4014 ZZuretc:错误是什么?当在测试器中运行时,该函数会删除挂单,有时不会。为什么?操作原理如下:当买入订单被TP平仓时,买入限价被移除。请告知。OrdersTotal() != OrdersHistoryTotal() mila.com 2017.12.27 03:23 #4015 Alexey Viktorov: 我自己还没有研究过其中的奥妙。谢谢你。 Roman Sharanov 2017.12.27 15:20 #4016 你能告诉我如何找到 当前ATR的最大值 和最小值吗? 附加的文件: q6a0hh.PNG 12 kb Skander 2017.12.27 16:33 #4017 大家好。基于Stochstick做了一个简单的专家顾问(在顶峰时卖出,在底峰时买入),而编译器当场给出了一个错误。谁能告诉我这是什么原因,这个错误是什么意思?起初我以为我忘了在某个地方加一个括号。但是没有,我检查了好几次,似乎支架一切正常。我将非常感谢您的帮助。下面是编译器产生的错误:')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 177 3')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 210 3这里是专家顾问本身和一个mq4文件的附件。请告知如何将专家顾问附在这个文件上(在编辑器中用彩色字母)。//+------------------------------------------------------------------+//| Stohastic-Signals-33.mq4//| Copyright 2017, MetaQuotes Software Corp.//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2017, MetaQuotes Software Corp."#属性链接 "https://www.mql5.com"#财产版本 "1.00"#属性严格//+------------------------------------------------------------------+bool New_Bar=false; // 新条的标志。extern double H_line=80; // Stochastic upper (overbought) line.extern double L_line=20; // Stochastic的下线(超卖)。外部inttern Slippage=2; // Slippageextern int SL; // 被设置的订单的SL。extern int TP; // 被设置的订单的TP。外部双Lts; //Lot大小的订单被设置。bool B_Flag=false; // BUY的信号标志。S_Flag=false, // 卖出信号的标志ORD_Buy=false, // 标志着买入头寸的开启ORD_Sell=false; // 标志着卖出头寸的开放。bool Work=true; // 允许专家工作的标志。 true-没有关键错误,false-存在。string Symb; // 金融工具的名称int Crit_Error=11111111; // 关键错误的数量//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+空白的OnTick(){䵮䵮总数, // 窗口中的订单数Tip=-1, // 选择的订单类型(B=0,S=1)。Ticket; // 订单号双M_1, M_2, M_3, // 1、2、3小节的MAIN值Lot; // 所选订单中的手数bool Ans_Close; // 关闭订单成功的标志(1-关闭,0-未关闭)。bool Ans_Open; // 标志着订单是否被成功打开(1-关闭,0-未打开)。//--------------------------------------------------------------- 1 --// 检查是否有重大错误如果(Work==false) // 严重错误{警告("严重错误,专家顾问不工作;)return; // 从start()退出。}//--------------------------------------------------------------- 2 --// 新酒吧Fun_New_Bar(); // 函数的调用。如果(New_Bar==false)//如果条形图不是新的。return; // ...然后退出//------------------------------------------------------------- 3 --// 顺序计数Symb=Symbol(); // 金融工具的名称。总数=0; // 订单数量for(int i=1; i<=OrdersTotal(); i++) // 订单循环{如果(OrderSelect(i-1,SELECT_BY_POS)==true) //如果{ // 订单分析。如果(OrderSymbol()!=Symb)继续; // 不是我们的金融工具Ticket=OrderTicket(); // 选择的订单号。Tip =OrderType(); // 所选订单的类型。Lot=OrderLots(); // 手数的多少}否则{Alert("OrderSelect() returned an error - ",GetLastError()); // If order could not be selected, then.return; // 退出}}//------------------------------------------------------------- 4 --// 贸易标准 形势分析M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1条M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2条M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);//3 bar//------------------------------------------------------------- 5 --如果(M_2>=H_line) // 如果随机指数已经越过超买线{if(M_3 <= M_2 && M_2 > M_1) // 随机指数已经越过超买线 {...{如果(S_Flag==true) // 如果(Sell position opened, then ...return; // 退出start()// 如果卖出位置没有打开,那么......。S_Flag=true; //我们设置一个标志,表明卖出信号已经出现。B_Flag=false; // 检查买入信号是否已经出现。if(ORD_Buy==true) // 如果买入订单已被打开,...{if(Tip!=0) // 检查:订单类型与开仓订单不一致...{Work=false; //专家顾问将不工作。Alert("订单类型与未平仓订单FLAG不一致。 退出开始。"); // 如果匹配不存在,专家顾问停止工作。return; // 从起点退出}Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Close the open Buy order.if(Ans_Close==false) // 如果关闭失败,那么。{Alert("Failed to close the order.Expert Advisor停止工作。Critical error number ", Crit_Error)。return; // 退出}}Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // OPEN POINTS如果(Ans_Open==false) // 如果卖出失败{Alert("Failed to open order.Expert Advisor停止工作。Critical error number ", Crit_Error)。return; // 从起点退出} // 如果Sell被成功打开ORD_Sell=true; //我们设置了一个标志,表明一个空头头寸已经被打开。ORD_Buy=false; // 将长线头寸标记为消失。}return; // 退出开始}//------------------------------------------------------------------------ 6 --如果(M_2<=L_line) // 如果随机指数已经越过超卖线。{如果(M_3 >= M_2 && M_2 < M_1) // 底部峰值出现(买入看涨){如果(B_Flag==true)//如果买入头寸已经打开return; // 退出start()// 如果没有建立买入头寸,那么...B_Flag=true; // 买入头寸的标志为正数。S_Flag=false; // 检查是否没有卖出信号if(ORD_Sell==true) // 如果有一个开放的卖出订单,...{if(Tip!=1) // 检查:订单类型与开仓订单不一致...{Work=false; //专家顾问将不工作。Alert("订单类型与未平仓订单FLAG不一致。 退出开始。"); // 如果匹配不存在,专家顾问停止工作。return; // 从起点退出}Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Close the open Sell order.如果(Ans_Close==false) // 如果关闭失败{Alert("Failed to close the order.Expert Advisor停止工作。Critical error number ", Crit_Error)。return; // 退出}}Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION如果(Ans_Open==false) //如果打开Buy失败了{Alert("Failed to open order.Expert Advisor停止工作。Critical error number ", Crit_Error)。return; // 从起点退出} // 如果买入订单被成功打开ORD_Sell=false; // 检查是否有空头头寸ORD_Buy=true; // 旗帜性地打开长线头寸}return; // 退出开始}}//+------------------------------------------------------------------ 7 --void Fun_New_Bar() // The detection fie .{ // ......新酒吧。static datetime New_Time=0; // 当前酒吧的时间。New_Bar=false; // 没有新条形。if(New_Time!=Time[0]) // 比较时间。{New_Time=Time[0]; // 现在的时间是New_Bar=true; // 新条被捕获。}}//--------------------------------------------------------------- 8 --bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Order closing fie{double Close_Price=0; // 订单的收盘价。while(true){RefreshRates(); // 更新数据if(F_Tip==0) // 如果订单是买入,...Close_Price=Bid; // 收盘价 BidClose_Price=Ask; // 如果订单是卖出,收盘价为Ask。bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 关闭买入或卖出。如果(Ans_Close==true) // 它成功了 :)return(true); // 从关闭函数中退出。Crit_Error=GetLastError(); // 修复错误编号如果(Fun_Error(Crit_Error)==1) // 错误处理continue; // retry; // try again.return(false); // 从函数中退出。}}//--------------------------------------------------------------- 9 --//订单开放bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip){double Open_Price; //开盘价string Tip_Deal; //交易方向(买或卖)。double f_sl; // Stop Loss orderdouble f_tp; // Take Profitint Ticket; // 未结订单的票据while(true) //命令关闭循环。{RefreshRates(); // 更新数据if(F_Tip==1) // 打开卖出...{Open_Price=Bid。Tip_Deal="OP_SELL"。f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)。f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)。}//-------------------------------- 如果你想打开BUY,那么...开盘价=询问。Tip_Deal="OP_BUY"。f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)。f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)。Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//打开ORDERif (Ticket > 0) // 它成功了 :)return(true); //从函数中退出。Crit_Error=GetLastError(); //提交错误的编号如果(Fun_Error(Crit_Error)==1) // 错误处理continue; // retry; // try again.return(false); // 从函数中退出。}}//--------------------------------------------------------------- 10 --int Fun_Error(int Error) //函数处理错误{switch(Error){// 无法克服的错误。case 4: Alert("Trade server is busy. Try again...");Sleep(3000); // 简单的解决方案。return(1); // 退出函数。case 135:Alert("Price changed. Try again...")。RefreshRates(); // 刷新数据。return(1); // 从函数中退出。case 136:Alert("No price. Waiting for a new tick...")。while(RefreshRates()==false) // 读取一个新的刻度线Sleep(1); // 循环中的延迟。return(1); // 从函数中退出。case 137:Alert("Broker is busy. Try again...");Sleep(3000); // 简单的解决方案。return(1); // 从函数中退出。case 146:Alert("The trading subsystem is busy. Try again...");Sleep(500); // 简单决定return(1); // 从函数中退出。// 严重错误case 2: Alert("General error;)return(0); // 从函数中退出。case 5: Alert("旧版本的终端。")。Work=false; // 不再工作return(0); // 从函数中退出。case 64: Alert("Account blocked.");Work=false; // 不再工作return(0); // 从函数中退出。case 133:Alert("禁止交易。")。return(0); // 从函数中退出。case 134:Alert("没有足够的钱来执行交易")。return(0); // 从函数中退出。默认:Alert("An error has occurred",Error); // Other optionsreturn(0); // 从函数中退出。}}//-------------------------------------------------------------- 11 -- 附加的文件: Stohastic-hg8zb4w-33.mq4 28 kb Any questions from newcomers [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Konstantin Erin 2017.12.27 17:15 #4018 RomanRott: 你能告诉我如何找到 当前ATP的最大值 和最小值吗? double max=-10000, min=+10000, ATR; for(int n=0; n<WindowFirstVisibleBar();n++) { ATR=iATR(NULL, 0, 14, n); if(max<ATR)max=ATR; if(min>ATR)min=ATR; } Alert("min = ", DoubleToStr(min,4), " max = ", DoubleToString(max,4)); 对于其他指标也是如此 Konstantin Erin 2017.12.27 17:25 #4019 Skander: 大家好。在Stochstic的基础上做了一个简单的专家(在顶部的峰值卖出,在底部的买入),编译器在一个平面上给出了一个错误。 谁能告诉我这是什么原因,这个错误是什么意思?起初我以为我忘了在某个地方加一个括号。 但是没有,我检查了几次,一切似乎都很好。我将非常感谢您的帮助。 下面是编译器产生的错误:')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 177 3')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 210 3//--------------------------------------------------------------- 8 -- bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Order closing fie{ double Close_Price=0; // 订单的收盘价。 while(true){ RefreshRates()。// 刷新数据 如果(F_Tip==0)// If(Buy order, ... Close_Price=Bid; // 收盘价 Bid 收盘价=报价。// 如果是卖出订单,收盘价为Ask bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 关闭买入或卖出。 如果(Ans_Close==true)// 它成功了。) return(true)。//从关闭函数中退出 Crit_Error=GetLastError()。// 提交错误编号 如果(Fun_Error(Crit_Error)==1) // 错误处理 继续。// 重试 return(false)。// 退出该函数}} 在MetaEditor中按下编译按钮,阅读错误信息--有一个行号和位置号//--------------------------------------------------------------- 8 -- bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Ф-ия закрытия ордера { double Close_Price=0; // Цена закрытия ордера while(true) { .................................... continue; // Повторная попытка return(false); // Выход из функции } return false; // Компилятор хочет return в конце функции }用SRC按钮插入程序代码--本地读者更喜欢这种方式!!你的长篇大论是BRRRR。 按钮用于在信息文本中插入源代码。点击后,会出现一个空窗口,你需要在那里粘贴代码,然后点击插入 按钮。 Skander 2017.12.28 06:24 #4020 STARIJ:在MetaEditor中按下编译按钮,阅读错误信息--有一个行号和位置号用SRC按钮插入程序代码--本地读者更喜欢这种方式!!你的长篇大论是BRRRRR。该按钮用于将源代码插入帖子的文本中。点击后,会出现一个空窗口,你需要在这里粘贴代码,然后点击插入 按钮。谢谢你。 1...395396397398399400401402403404405406407408409...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
鼠标点击图形对象的事件
鼠标点击
X坐标
Y坐标
发生事件的图形对象的名称
呃,我想我已经明白了)
谢谢你的帮助!
我不知道如何将结果 "r "连接到一个缓冲区以在图表上显示,请指教。
我无法理解教科书中的例子,我问过别人
他们写道--"将 "r "的值写入缓冲区,它就会出现在图形上。"和 "通常你通过for循环向缓冲区写入。"
但这并不能说明什么!
一个结果是只有字母 "r",仅此而已,我在任何地方都找不到它。
还有一件事
例如,如何将结果 "r "平滑化。
谢谢您的关注!错误是什么?当在测试器中运行时,该函数会删除挂单,有时不会。为什么?操作原理如下:当买入订单被TP平仓时,买入限价被移除。请告知
错误是什么?当在测试器中运行时,该函数会删除挂单,有时不会。为什么?操作原理如下:当买入订单被TP平仓时,买入限价被移除。请告知。
OrdersTotal() != OrdersHistoryTotal()
谢谢你。
大家好。
基于Stochstick做了一个简单的专家顾问(在顶峰时卖出,在底峰时买入),而编译器当场给出了一个错误。
谁能告诉我这是什么原因,这个错误是什么意思?起初我以为我忘了在某个地方加一个括号。
但是没有,我检查了好几次,似乎支架一切正常。我将非常感谢您的帮助。
下面是编译器产生的错误:')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 177 3
这里是专家顾问本身和一个mq4文件的附件。
请告知如何将专家顾问附在这个文件上(在编辑器中用彩色字母)。
//+------------------------------------------------------------------+
//| Stohastic-Signals-33.mq4
//| Copyright 2017, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#属性链接 "https://www.mql5.com"
#财产版本 "1.00"
#属性严格
//+------------------------------------------------------------------+
bool New_Bar=false; // 新条的标志。
extern double H_line=80; // Stochastic upper (overbought) line.
extern double L_line=20; // Stochastic的下线(超卖)。
外部inttern Slippage=2; // Slippage
extern int SL; // 被设置的订单的SL。
extern int TP; // 被设置的订单的TP。
外部双Lts; //Lot大小的订单被设置。
bool B_Flag=false; // BUY的信号标志。
S_Flag=false, // 卖出信号的标志
ORD_Buy=false, // 标志着买入头寸的开启
ORD_Sell=false; // 标志着卖出头寸的开放。
bool Work=true; // 允许专家工作的标志。 true-没有关键错误,false-存在。
string Symb; // 金融工具的名称
int Crit_Error=11111111; // 关键错误的数量
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
䵮䵮
总数, // 窗口中的订单数
Tip=-1, // 选择的订单类型(B=0,S=1)。
Ticket; // 订单号
双
M_1, M_2, M_3, // 1、2、3小节的MAIN值
Lot; // 所选订单中的手数
bool Ans_Close; // 关闭订单成功的标志(1-关闭,0-未关闭)。
bool Ans_Open; // 标志着订单是否被成功打开(1-关闭,0-未打开)。
//--------------------------------------------------------------- 1 --
// 检查是否有重大错误
如果(Work==false) // 严重错误
{
警告("严重错误,专家顾问不工作;)
return; // 从start()退出。
}
//--------------------------------------------------------------- 2 --
// 新酒吧
Fun_New_Bar(); // 函数的调用。
如果(New_Bar==false)//如果条形图不是新的。
return; // ...然后退出
//------------------------------------------------------------- 3 --
// 顺序计数
Symb=Symbol(); // 金融工具的名称。
总数=0; // 订单数量
for(int i=1; i<=OrdersTotal(); i++) // 订单循环
{
如果(OrderSelect(i-1,SELECT_BY_POS)==true) //如果
{ // 订单分析。
如果(OrderSymbol()!=Symb)继续; // 不是我们的金融工具
Ticket=OrderTicket(); // 选择的订单号。
Tip =OrderType(); // 所选订单的类型。
Lot=OrderLots(); // 手数的多少
}
否则
{
Alert("OrderSelect() returned an error - ",GetLastError()); // If order could not be selected, then.
return; // 退出
}
}
//------------------------------------------------------------- 4 --
// 贸易标准 形势分析
M_1=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,1);// 1条
M_2=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,2);// 2条
M_3=iStochastic(NULL,0,8,3,3,MODE_EMA,0,MODE_MAIN,3);//3 bar
//------------------------------------------------------------- 5 --
如果(M_2>=H_line) // 如果随机指数已经越过超买线
{
if(M_3 <= M_2 && M_2 > M_1) // 随机指数已经越过超买线 {...
{
如果(S_Flag==true) // 如果(Sell position opened, then ...
return; // 退出start()
// 如果卖出位置没有打开,那么......。
S_Flag=true; //我们设置一个标志,表明卖出信号已经出现。
B_Flag=false; // 检查买入信号是否已经出现。
if(ORD_Buy==true) // 如果买入订单已被打开,...
{
if(Tip!=0) // 检查:订单类型与开仓订单不一致...
{
Work=false; //专家顾问将不工作。
Alert("订单类型与未平仓订单FLAG不一致。 退出开始。"); // 如果匹配不存在,专家顾问停止工作。
return; // 从起点退出
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Close the open Buy order.
if(Ans_Close==false) // 如果关闭失败,那么。
{
Alert("Failed to close the order.Expert Advisor停止工作。Critical error number ", Crit_Error)。
return; // 退出
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,1); // OPEN POINTS
如果(Ans_Open==false) // 如果卖出失败
{
Alert("Failed to open order.Expert Advisor停止工作。Critical error number ", Crit_Error)。
return; // 从起点退出
} // 如果Sell被成功打开
ORD_Sell=true; //我们设置了一个标志,表明一个空头头寸已经被打开。
ORD_Buy=false; // 将长线头寸标记为消失。
}
return; // 退出开始
}
//------------------------------------------------------------------------ 6 --
如果(M_2<=L_line) // 如果随机指数已经越过超卖线。
{
如果(M_3 >= M_2 && M_2 < M_1) // 底部峰值出现(买入看涨)
{
如果(B_Flag==true)//如果买入头寸已经打开
return; // 退出start()
// 如果没有建立买入头寸,那么...
B_Flag=true; // 买入头寸的标志为正数。
S_Flag=false; // 检查是否没有卖出信号
if(ORD_Sell==true) // 如果有一个开放的卖出订单,...
{
if(Tip!=1) // 检查:订单类型与开仓订单不一致...
{
Work=false; //专家顾问将不工作。
Alert("订单类型与未平仓订单FLAG不一致。 退出开始。"); // 如果匹配不存在,专家顾问停止工作。
return; // 从起点退出
}
Ans_Close=Close_Order(Ticket,Lot,Slippage,Tip); // Close the open Sell order.
如果(Ans_Close==false) // 如果关闭失败
{
Alert("Failed to close the order.Expert Advisor停止工作。Critical error number ", Crit_Error)。
return; // 退出
}
}
Ans_Open=Open_Order(Symb,Lts,SL,TP,0); // OPEN LONG POSITION
如果(Ans_Open==false) //如果打开Buy失败了
{
Alert("Failed to open order.Expert Advisor停止工作。Critical error number ", Crit_Error)。
return; // 从起点退出
} // 如果买入订单被成功打开
ORD_Sell=false; // 检查是否有空头头寸
ORD_Buy=true; // 旗帜性地打开长线头寸
}
return; // 退出开始
}
}
//+------------------------------------------------------------------ 7 --
void Fun_New_Bar() // The detection fie .
{ // ......新酒吧。
static datetime New_Time=0; // 当前酒吧的时间。
New_Bar=false; // 没有新条形。
if(New_Time!=Time[0]) // 比较时间。
{
New_Time=Time[0]; // 现在的时间是
New_Bar=true; // 新条被捕获。
}
}
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Order closing fie
{
double Close_Price=0; // 订单的收盘价。
while(true)
{
RefreshRates(); // 更新数据
if(F_Tip==0) // 如果订单是买入,...
Close_Price=Bid; // 收盘价 Bid
Close_Price=Ask; // 如果订单是卖出,收盘价为Ask。
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 关闭买入或卖出。
如果(Ans_Close==true) // 它成功了 :)
return(true); // 从关闭函数中退出。
Crit_Error=GetLastError(); // 修复错误编号
如果(Fun_Error(Crit_Error)==1) // 错误处理
continue; // retry; // try again.
return(false); // 从函数中退出。
}
}
//--------------------------------------------------------------- 9 --
//订单开放
bool Open_Order(string F_Symb,double F_Lts,int F_SL,int F_TP,int F_Tip)
{
double Open_Price; //开盘价
string Tip_Deal; //交易方向(买或卖)。
double f_sl; // Stop Loss order
double f_tp; // Take Profit
int Ticket; // 未结订单的票据
while(true) //命令关闭循环。
{
RefreshRates(); // 更新数据
if(F_Tip==1) // 打开卖出...
{
Open_Price=Bid。
Tip_Deal="OP_SELL"。
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)。
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)。
}
//-------------------------------- 如果你想打开BUY,那么...
开盘价=询问。
Tip_Deal="OP_BUY"。
f_sl=NormalizeDouble(Bid+F_SL*Point,Digits)。
f_tp=NormalizeDouble(Bid-F_TP*Point,Digits)。
Ticket=OrderSend(F_Symb,Tip_Deal,F_Lts,Open_Price,2,f_sl,f_tp);//打开ORDER
if (Ticket > 0) // 它成功了 :)
return(true); //从函数中退出。
Crit_Error=GetLastError(); //提交错误的编号
如果(Fun_Error(Crit_Error)==1) // 错误处理
continue; // retry; // try again.
return(false); // 从函数中退出。
}
}
//--------------------------------------------------------------- 10 --
int Fun_Error(int Error) //函数处理错误
{
switch(Error)
{// 无法克服的错误。
case 4: Alert("Trade server is busy. Try again...");
Sleep(3000); // 简单的解决方案。
return(1); // 退出函数。
case 135:Alert("Price changed. Try again...")。
RefreshRates(); // 刷新数据。
return(1); // 从函数中退出。
case 136:Alert("No price. Waiting for a new tick...")。
while(RefreshRates()==false) // 读取一个新的刻度线
Sleep(1); // 循环中的延迟。
return(1); // 从函数中退出。
case 137:Alert("Broker is busy. Try again...");
Sleep(3000); // 简单的解决方案。
return(1); // 从函数中退出。
case 146:Alert("The trading subsystem is busy. Try again...");
Sleep(500); // 简单决定
return(1); // 从函数中退出。
// 严重错误
case 2: Alert("General error;)
return(0); // 从函数中退出。
case 5: Alert("旧版本的终端。")。
Work=false; // 不再工作
return(0); // 从函数中退出。
case 64: Alert("Account blocked.");
Work=false; // 不再工作
return(0); // 从函数中退出。
case 133:Alert("禁止交易。")。
return(0); // 从函数中退出。
case 134:Alert("没有足够的钱来执行交易")。
return(0); // 从函数中退出。
默认:Alert("An error has occurred",Error); // Other options
return(0); // 从函数中退出。
}
}
//-------------------------------------------------------------- 11 --
谁能告诉我这是什么原因,这个错误是什么意思?起初我以为我忘了在某个地方加一个括号。
但是没有,我检查了几次,一切似乎都很好。我将非常感谢您的帮助。
下面是编译器产生的错误:')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 177 3
')'- 不是所有的控制路径都会返回一个值 Stohastic-Signals-33.mq4 210 3
//--------------------------------------------------------------- 8 --
bool Close_Order(int F_Ticket,double F_Lot,int F_Slippage,int F_Tip) // Order closing fie
{
double Close_Price=0; // 订单的收盘价。
while(true)
{
RefreshRates()。// 刷新数据
如果(F_Tip==0)// If(Buy order, ...
Close_Price=Bid; // 收盘价 Bid
收盘价=报价。// 如果是卖出订单,收盘价为Ask
bool Ans_Close=OrderClose(F_Ticket,F_Lot,Close_Price,F_Slippage); // 关闭买入或卖出。
如果(Ans_Close==true)// 它成功了。)
return(true)。//从关闭函数中退出
Crit_Error=GetLastError()。// 提交错误编号
如果(Fun_Error(Crit_Error)==1) // 错误处理
继续。// 重试
return(false)。// 退出该函数
}
}
在MetaEditor中按下编译按钮,阅读错误信息--有一个行号和位置号
用SRC按钮插入程序代码--本地读者更喜欢这种方式!!你的长篇大论是BRRRR。
按钮用于在信息文本中插入源代码。点击后,会出现一个空窗口,你需要在那里粘贴代码,然后点击插入 按钮。
在MetaEditor中按下编译按钮,阅读错误信息--有一个行号和位置号
用SRC按钮插入程序代码--本地读者更喜欢这种方式!!你的长篇大论是BRRRRR。
该按钮用于将源代码插入帖子的文本中。点击后,会出现一个空窗口,你需要在这里粘贴代码,然后点击插入 按钮。
谢谢你。