任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 66 1...596061626364656667686970717273...1178 新评论 Mepkypuu 2013.08.05 23:45 #651 Roger: 你所说的 "跟踪 "实际上不是,它是以不同的方式计算的,其行为可能是不合逻辑的。 尽管我们对这些术语的概念并不一致,但你确实理解我,不是吗? 解决了这个问题,它就在这里。 double getLots(double newSL) { int opnTime = 0; // время открытия трейда для цикла пересчета позиций double lotSum = 0; for (int i = 0; i <= OrdersTotal()-1; i++) { OrderSelect(i, SELECT_BY_POS); if ((OrderOpenTime() > opnTime) && (OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { opnTime = OrderOpenTime(); if (OrderType() == OP_BUY) { lotSum += OrderLots() * (newSL - OrderOpenPrice()) / Point; } if (OrderType() == OP_SELL) { lotSum -= OrderLots() * (newSL - OrderOpenPrice()) / Point; } } } return(lotSum); } 这个函数没有考虑到所有未完成的交易,所以我不得不改变循环条件。现在看起来是这样的。 double AcountProfitEx(double Price) { double ProfitSum = 0; for (int i = OrdersTotal()-1; i >= 0; i--) { OrderSelect(i, SELECT_BY_POS); if(OrderType() == OP_BUY) ProfitSum -= (OrderOpenPrice() - Price) * OrderLots() / Point; if(OrderType() == OP_SELL) ProfitSum += (OrderOpenPrice() - Price) * OrderLots() / Point; } return (ProfitSum); } 该函数计算所有未平仓交易在其指定的价格水平上的利润总和。然而,有一种引用的观点认为,它没有考虑到价差,我同意这种观点。本意见的作者提出了这个解决方案。 double getLots(double newSL) { double TickValue, delta; double lotSum; string SymbolName; SymbolName = Symbol(); TickValue = MarketInfo( SymbolName, MODE_TICKVALUE) / Point; delta = ( newSL - Bid ) * TickValue; lotSum = 0.0; for (int i = 0; i <= OrdersTotal()-1; i++) { OrderSelect(i, SELECT_BY_POS); if ( OrderSymbol() == SymbolName ) { if (OrderType() == OP_BUY) { lotSum += OrderProfit() + OrderLots() * delta; } if (OrderType() == OP_SELL) { lotSum += OrderProfit() - OrderLots() * delta; } } } return(lotSum); } 但我坦白地说,我不理解他的写作。 差价没有计算在内。这可以通过从当前价格算起的结果进行纠正。 我不明白他建议的算法,如何考虑到价差?谁能解释一下? Mislaid 2013.08.06 00:35 #652 Mepkypuu:但是,说实话,我并不理解他的写作。 我似乎不明白他的算法;那里的价差是如何考虑的?谁能解释一下? OrderProfit()计算的是当前Ask的空头头寸,这是考虑到当前价差的价值。如果价差不发生变化,当价格从当前的买入价变为新SL时,该头寸的单手利润(买入或卖出,有适当的符号)将按delta值变化,该值写在操作符上。 delta = ( newSL - Bid ) * TickValue; 简而言之,OrderProfit()计算一切,包括点差。 我们用OrderProfit()将结果固定在某一时刻(当前价格)。从这里开始,我们所要做的就是监测价格变化。 Mepkypuu 2013.08.06 02:53 #653 Mislaid:OrderProfit()计算的是当前Ask的空头头寸,这是考虑到当前点差值的地方。如果价差没有变化,当价格从当前的买入价变为新的SL时,该头寸的单手利润(无论是买入还是卖出,都有相应的符号)将按delta值变化,该值写在报表上。 delta = ( newSL - Bid ) * TickValue;简而言之,OrderProfit()计算一切,包括点差。 我们用OrderProfit()将结果固定在某一时刻(当前价格)。从这里开始,我们所要做的就是监测价格变化。我想我开始明白了,但也许它更正确。 if (OrderType() == OP_BUY) { lotSum += OrderProfit() + OrderLots() * ((newSL - Bid) / Point * MarketInfo( SymbolName, MODE_TICKVALUE)); } if (OrderType() == OP_SELL) { lotSum += OrderProfit() - OrderLots() * ((newSL - Ask) / Point * MarketInfo( SymbolName, MODE_TICKVALUE)); } 空头头寸的OrderProfit是根据Ask价格计算的,不是吗? 顺便说一下,MarketInfo( SymbolName, MODE_TICKVALUE) 对欧元兑美元货币 对返回329.02,这就是为什么这个函数对我来说不能正常工作。 Mepkypuu 2013.08.06 05:23 #654 到目前为止,我决定采用一个技巧,即MarketInfo(SymbolName, MODE_TICKVALUE) 以不同方式计算。double GetTickValue(string CurrentQuote) { string AccountCurr = AccountCurrency(); string BaseCurr = StringSubstr(CurrentQuote,0,3); string CurrentCurr = StringSubstr(CurrentQuote,3,3); if (CurrentCurr == AccountCurr) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE)); if (BaseCurr == AccountCurr) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE) / MarketInfo(CurrentQuote, MODE_BID)); if ((CurrentCurr != AccountCurr) && (BaseCurr != AccountCurr)) return (MarketInfo(CurrentQuote, MODE_LOTSIZE) * MarketInfo(CurrentQuote, MODE_TICKSIZE) * MarketInfo(StringConcatenate(BaseCurr,AccountCurr), MODE_BID) / MarketInfo(CurrentQuote, MODE_BID)); } Mislaid 2013.08.06 07:10 #655 Mepkypuu: 到目前为止,我决定采用一个技巧,即MarketInfo(SymbolName, MODE_TICKVALUE) 以不同方式计算。 它的写法是正确的。在价差不变的情况下,买入价和卖出价分别有多大的变化。 Mikhail Kozhemyako 2013.08.06 07:25 #656 Mislaid: 它的写法是正确的。如果价差不变,买入多少,卖出多少,就有多少。 根据个人经验,传播通常是不变的,而且相当强烈)。在急剧的移动中,我看到五位数 的价差从8点增加到80点。 Александр 2013.08.07 04:22 #657 有可能对双顶 进行编码(可靠地)吗? Alekseu Fedotov 2013.08.07 08:07 #658 001: 双层顶能否被编码(可靠地)? 这是有可能的。 Alexey Semenov 2013.08.07 13:40 #659 在日记中测试专家顾问 时,弹出了一个错误 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: Error 4002 (array index - out of range) 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 试图打开一个买入指令。等待答案。 因此,这些订单没有被打开。如何消除这个错误?原因何在? 我很高兴能提供帮助。 Any rookie question, so Making money on forex t/p is not working Mepkypuu 2013.08.07 13:59 #660 alexey1979621: 在测试一个EA时,日志中弹出了一个错误 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: Error 4002 (array index - out of range) 2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 试图打开一个买入指令。等待答案。 因此,这些订单没有被打开。如何消除这个错误?原因何在? 我很高兴能提供帮助。 仅仅从终端信息中看不出什么,如果你不公布EA代码,就没有什么帮助。在你的数组的某个地方,你正在写一批不存在的数据,作为假设之一,但猜测不是我的资料。 1...596061626364656667686970717273...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你所说的 "跟踪 "实际上不是,它是以不同的方式计算的,其行为可能是不合逻辑的。
尽管我们对这些术语的概念并不一致,但你确实理解我,不是吗?
解决了这个问题,它就在这里。
这个函数没有考虑到所有未完成的交易,所以我不得不改变循环条件。现在看起来是这样的。
该函数计算所有未平仓交易在其指定的价格水平上的利润总和。然而,有一种引用的观点认为,它没有考虑到价差,我同意这种观点。本意见的作者提出了这个解决方案。
但我坦白地说,我不理解他的写作。
但是,说实话,我并不理解他的写作。
我似乎不明白他的算法;那里的价差是如何考虑的?谁能解释一下?OrderProfit()计算的是当前Ask的空头头寸,这是考虑到当前价差的价值。如果价差不发生变化,当价格从当前的买入价变为新SL时,该头寸的单手利润(买入或卖出,有适当的符号)将按delta值变化,该值写在操作符上。
delta = ( newSL - Bid ) * TickValue;
简而言之,OrderProfit()计算一切,包括点差。 我们用OrderProfit()将结果固定在某一时刻(当前价格)。从这里开始,我们所要做的就是监测价格变化。
OrderProfit()计算的是当前Ask的空头头寸,这是考虑到当前点差值的地方。如果价差没有变化,当价格从当前的买入价变为新的SL时,该头寸的单手利润(无论是买入还是卖出,都有相应的符号)将按delta值变化,该值写在报表上。
delta = ( newSL - Bid ) * TickValue;
简而言之,OrderProfit()计算一切,包括点差。 我们用OrderProfit()将结果固定在某一时刻(当前价格)。从这里开始,我们所要做的就是监测价格变化。
我想我开始明白了,但也许它更正确。
空头头寸的OrderProfit是根据Ask价格计算的,不是吗?
顺便说一下,MarketInfo( SymbolName, MODE_TICKVALUE) 对欧元兑美元货币 对返回329.02,这就是为什么这个函数对我来说不能正常工作。
到目前为止,我决定采用一个技巧,即MarketInfo(SymbolName, MODE_TICKVALUE) 以不同方式计算。
到目前为止,我决定采用一个技巧,即MarketInfo(SymbolName, MODE_TICKVALUE) 以不同方式计算。
它的写法是正确的。如果价差不变,买入多少,卖出多少,就有多少。
根据个人经验,传播通常是不变的,而且相当强烈)。在急剧的移动中,我看到五位数 的价差从8点增加到80点。
双层顶能否被编码(可靠地)?
在日记中测试专家顾问 时,弹出了一个错误
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: Error 4002 (array index - out of range)
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 试图打开一个买入指令。等待答案。
因此,这些订单没有被打开。如何消除这个错误?原因何在?
我很高兴能提供帮助。
在测试一个EA时,日志中弹出了一个错误
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: Error 4002 (array index - out of range)
2013.08.07 12:35:41 2012.06.06 05:29 Puria - 1.452 - SQ EURUSD,M30: 试图打开一个买入指令。等待答案。
因此,这些订单没有被打开。如何消除这个错误?原因何在?
我很高兴能提供帮助。