初学者的问题 MQL4 MT4 MetaTrader 4 - 页 72 1...656667686970717273747576777879...261 新评论 Arseniy Barudkin 2017.03.21 07:54 #711 Vitalie Postolache: 我也会说同样的话。你不擅长逻辑。根据可用资金和风险值(我想写的是3%),立即计算出初始手数,有什么问题?为什么你必须在一个地方做所有事情?取自由保证金的数值,乘以风险,再除以100,即为1手的保证金数值--这里是最简单的计算公式,即用自由保证金的指定百分比来计算手数。另外,你需要考虑到换手的步骤,防止超过经纪公司允许的最小/最大手数。 我告诉你,EA的交易时间很短,其中有一个概率是连续9个相反的订单相互重叠打开,每个下一个订单都乘以2,所以保证金可能无法保持,最后一个挂单 可能无法打开,因此我们必须从最后可能的最大手数开始计算。一般来说,我需要计算一个保证金,如果所有的订单都将被打开,并在这些数据的基础上按相反的顺序计算出第一手。 funnyrain8 2017.03.21 13:45 #712 如果(OrdersTotal() >= OrderCount){返回。}//----如果(r > 50 && p > m)//打开购买订单{ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //打开买入订单}//-----如果(r < 50 && p < m)//开放卖出订单条件{ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue)。}//----- 关闭订单for (int i=1; i<=OrdersTotal(); i++){如果(OrderSelect(ticketB,SELECT_BY_TICKET) ==true){如果(r < 50 && p < m){OrderClose(ticketB,0.1,Bid,5,Red)。}}}我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。我正在绞尽脑汁。 Questions from Beginners MQL4 Any questions from newcomers Please correct this EA Alekseu Fedotov 2017.03.21 14:18 #713 funnyrain8:如果(OrdersTotal() >= OrderCount){返回。}//----如果(r > 50 && p > m)//打开购买订单{ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //打开买入订单}//-----如果(r < 50 && p < m)//开放卖出订单条件{ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue)。}//----- 关闭订单for (int i=1; i<=OrdersTotal(); i++){如果(OrderSelect(ticketB,SELECT_BY_TICKET) ==true){如果(r < 50 && p < m){OrderClose(ticketB,0.1,Bid,5,Red)。}}}我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。我正在绞尽脑汁。 if(OrdersTotal()>=OrderCount) //Обрати внимание на эту конструкцию { // return; } //---- if(r>50 && p>m) //условия открытия ордера на покупку { for(int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(ticketB,SELECT_BY_TICKET)==true) { if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),0.1,Ask,5,Red); } } } ticketB=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); //открыnие ордера на покупку } //----- if(r<50 && p<m) //условия открытия ордера на продажу { for(int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(ticketB,SELECT_BY_TICKET)==true) { if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),0.1,Bid,5,Red); } } } ticketS=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); } 像这样 Sergey Gritsay 2017.03.21 14:57 #714 funnyrain8:如果(OrdersTotal() >= OrderCount){返回。}//----如果(r > 50 && p > m)//打开购买订单{ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,",111,0,Green); //打开买入订单}//-----如果(r < 50 && p < m)//开放卖出订单条件{ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,",111,0,Blue)。}//----- 关闭订单for (int i=1; i<=OrdersTotal(); i++){如果(OrderSelect(ticketB,SELECT_BY_TICKET) ==true){如果(r < 50 && p < m){OrderClose(ticketB,0.1,Bid,5,Red)。}}}我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。我正在绞尽脑汁。如果订单在票据上被选中,你就不需要在循环中进行操作。如 果你想纠正代码,请使用SRC按钮将代码粘贴到信息 中。 funnyrain8 2017.03.21 15:31 #715 #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int ticketB,ticketS; void OnTick() //------------------------------------------------------------------------------------------------ { double p = iClose("EURUSD",PERIOD_M15,0); //показание текущей цены double r = iRSI ("EURUSD",PERIOD_M15,21,PRICE_CLOSE,0); //значение индюка RSI double m = iMA ("EURUSD",PERIOD_M15,89,0,MODE_EMA,PRICE_CLOSE,0); //значение индюка МА int OrderCount = 1; //---------------ПОДСЧЕТ ОРДЕРОВ------------------------------------------------------------------ if(OrdersTotal() >= OrderCount) { return; } //-------------ОТКРЫТИЕ ОРДЕРА НА ПОКУПКУ-------------------------------------------------------------------- /*if(r > 50 && p > m) //условия открытия ордера на покупку { ticketB = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",111,0,Green); } //------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ-------------------------------------------------------- if(r<50 && p<m) { for(int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(ticketB,SELECT_BY_TICKET)==true) { if(OrderType()==OP_BUY) { ticketB = OrderClose(OrderTicket(),0.1,Bid,5,Red); } } } }*/ //------------------ОТКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------- if(r < 50 && p < m) //условия открытия ордера на продажу { ticketS = OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",111,0,Blue); } //---------------------ЗАКРЫТИЕ ОРДЕРА НА ПРОДАЖУ--------------------------------------------------------- if(r>50 && p>m) { for(int i=1; i<=OrdersTotal(); i++) { if(OrderSelect(ticketS,SELECT_BY_TICKET)==true) { if(OrderType()==OP_SELL) { ticketS = OrderClose(OrderTicket(),0.1,Ask,5,Red); } } } } } //+------------------------------------------------------------------+ 谢谢你的SRC),这就是它的样子,TS看起来是这样的,当蜡烛收盘低于wop和rsi低于50时,卖出应该发生,并在相反的条件下关闭订单,同时在收盘后买入应该发生,收盘后,然后一个订单,没有更多,如此循环...但现在我有一个订单打开,这就是它,和停止不工作... Sergey Gritsay 2017.03.21 16:19 #716 funnyrain8: 谢谢你的SRC),这就是它的样子,ts看起来是这样的,卖出应该发生在蜡烛收盘低于手腕和rsi低于50的时候,并在相反的条件下关闭订单,同时在收盘后应该发生买入和收盘后,然后一个订单,没有更多,如此循环...但现在我打开一个订单和所有,和停止不工作... 我已经用自己的风格重写了,我希望你能理解,如果有不清楚的地方,请不要犹豫,请问//+------------------------------------------------------------------+ //| funnyrain8.mq4 | //| Sergey Gritsay | //| https://www.mql5.com/ru/users/sergey1294 | //+------------------------------------------------------------------+ #property copyright "Sergey Gritsay" #property link "https://www.mql5.com/ru/users/sergey1294" #property version "1.00" #property strict input int MagicNumber = 20110315; // Номер копии input string CommentOrder = "Origenal"; // Комментарий к ордеру input int Slippage=100; // Проскальзование (Пипс) input double Lot=0.01; // Объем лота input int SignalBar=0; // Сигнальный бар sinput string s1=NULL; // Setting indicator slow МА input int ma_period=89; // Period input ENUM_MA_METHOD ma_method=MODE_EMA;//Method calculation input ENUM_APPLIED_PRICE ma_price=PRICE_CLOSE;//Price calculation sinput string s2=NULL; // Setting indicator RSI input int rsi_period=21; // Period input ENUM_APPLIED_PRICE rsi_price=PRICE_CLOSE;//Price calculation //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(TotalOrder()==0)OrderOpen(GetSignal()); else OrderClose(GetSignal()); } //+------------------------------------------------------------------+ int GetSignal() { double rsi = iRSI(_Symbol,PERIOD_CURRENT,rsi_period,rsi_price,SignalBar); //значение индюка RSI double ma = iMA (_Symbol,PERIOD_CURRENT,ma_period,0,ma_method,ma_price,SignalBar); //значение индюка МА if(Close[SignalBar]>ma && rsi>50.0)return(OP_BUY); if(Close[SignalBar]<ma && rsi<50.0)return(OP_SELL); return(WRONG_VALUE); } //+------------------------------------------------------------------+ int TotalOrder() { int value=0; int total=OrdersTotal(); for(int i=total-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderSymbol()!=_Symbol)continue; if(OrderMagicNumber()!=MagicNumber)continue; if(OrderType()>1)continue; value++; } return(value); } //+------------------------------------------------------------------+ void OrderOpen(int type) { if(type==WRONG_VALUE)return; double price_open=(type==OP_BUY)?NormalizeDouble(Ask,_Digits):NormalizeDouble(Bid,_Digits); int ticket=OrderSend(_Symbol,type,Lot,price_open,Slippage,0,0,CommentOrder,MagicNumber); if(ticket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } //+------------------------------------------------------------------+ void OrderClose(int type) { if(type==WRONG_VALUE)return; int total=OrdersTotal(); for(int i=total-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS))continue; if(OrderMagicNumber()!=MagicNumber)continue; if(OrderSymbol()!=_Symbol)continue; if(OrderType()!=type)continue; double price_close=(type==OP_BUY)?NormalizeDouble(Bid,_Digits):NormalizeDouble(Ask,_Digits); bool res=OrderClose(OrderTicket(),OrderLots(),price_close,Slippage); if(!res)Print("Ошибка закрытия ордера № - ",GetLastError()); } } //+------------------------------------------------------------------+ ... funnyrain8 2017.03.21 16:32 #717 Sergey Gritsay: 用我自己的风格重写,希望你能理解,如果你有什么不明白的地方,请问... 哦,我想我几乎写了所有的东西,除了结尾,我还有很多东西要学......非常感谢,现在至少我有一个例子可以借鉴......锡,再次感谢) Жанна Платонова 2017.03.22 06:29 #718 你好。我已经下载了Metatrader 5软件。我报名参加了2个信号。我的账户余额为正20美元。我正在尝试安装虚拟主机,但没有任何效果。我按导航仪,连接到交易账户,我甚至在虚拟主机表中没有这样的标签。我正在给你发截图。我怎样才能连接到共享主机? 附加的文件: 3p46y0.jpg 273 kb g4ppe22.jpg 264 kb Alekseu Fedotov 2017.03.22 12:05 #719 Жанна Платонова: 你好。我已经下载了Metatrader 5软件。我报名参加了2个信号。我的账户余额为正20美元。我正在尝试安装虚拟主机,但没有任何效果。我按导航仪,连接到交易账户,我甚至在虚拟主机表中没有这样的标签。我正在给你发截图。我怎样才能连接到共享主机? 点击主菜单 中的帮助。 kolb-sov 2017.03.23 09:29 #720 你好。我有一个问题--在mac(sierra)上,在所有交付的(通过wine)不同公司的平台mt4上都有同样的故障--终端如果你把它从底部的正常位置释放出来,把它作为一个自由窗口移动--它就会缩小,通过它工作是完全不可能的。禁用自动排列器并不奏效。要在以前的地方归还终端是绝对不可能的--也就是说,它根本无法连接,也无法再打开。我有个问题--谁能知道有什么快捷方式或按钮能让整个界面回到原来的位置。真诚的。 1...656667686970717273747576777879...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我也会说同样的话。你不擅长逻辑。根据可用资金和风险值(我想写的是3%),立即计算出初始手数,有什么问题?为什么你必须在一个地方做所有事情?
取自由保证金的数值,乘以风险,再除以100,即为1手的保证金数值--这里是最简单的计算公式,即用自由保证金的指定百分比来计算手数。另外,你需要考虑到换手的步骤,防止超过经纪公司允许的最小/最大手数。
我告诉你,EA的交易时间很短,其中有一个概率是连续9个相反的订单相互重叠打开,每个下一个订单都乘以2,所以保证金可能无法保持,最后一个挂单 可能无法打开,因此我们必须从最后可能的最大手数开始计算。一般来说,我需要计算一个保证金,如果所有的订单都将被打开,并在这些数据的基础上按相反的顺序计算出第一手。
}
我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。
我正在绞尽脑汁。
}
我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。
我正在绞尽脑汁。
像这样
}
我哪里拼错了? 我想我是从一个例子中得到的,你能不能告诉我如何正确地拼写它,这样订单就会关闭。
我正在绞尽脑汁。
如果订单在票据上被选中,你就不需要在循环中进行操作。如 果你想纠正代码,请使用SRC按钮将代码粘贴到信息 中。
谢谢你的SRC),这就是它的样子,ts看起来是这样的,卖出应该发生在蜡烛收盘低于手腕和rsi低于50的时候,并在相反的条件下关闭订单,同时在收盘后应该发生买入和收盘后,然后一个订单,没有更多,如此循环...但现在我打开一个订单和所有,和停止不工作...
我已经用自己的风格重写了,我希望你能理解,如果有不清楚的地方,请不要犹豫,请问
...
用我自己的风格重写,希望你能理解,如果你有什么不明白的地方,请问
...
哦,我想我几乎写了所有的东西,除了结尾,我还有很多东西要学......非常感谢,现在至少我有一个例子可以借鉴......锡,再次感谢)
你好。我已经下载了Metatrader 5软件。我报名参加了2个信号。我的账户余额为正20美元。我正在尝试安装虚拟主机,但没有任何效果。我按导航仪,连接到交易账户,我甚至在虚拟主机表中没有这样的标签。我正在给你发截图。我怎样才能连接到共享主机?
点击主菜单 中的帮助。