初学者的问题 MQL5 MT5 MetaTrader 5 - 页 828 1...821822823824825826827828829830831832833834835...1503 新评论 lil_lil 2018.02.16 17:32 #8271 问候。这个问题更像是一个逻辑性问题。所谓的反马太效应系统,对增加的数量有限制。如果你获利平仓,下一手就会增加一个系数。如果出现亏损,或者连续盈利的头寸数量超过指定数量,那么手数就等于起始手数。一旦超过了指定的盈利头寸数量,我如何再次开始增加的循环?int K_U_=5; double LotExponent=2.00; //+------------------------------------------------------------------+ double llot() { double lt1=LotLastCloPos(Symbol(),m_magic);//лот последней закрытой позиции if(CountProfit(Symbol(),m_magic)>=1 && CountProfit(Symbol(),m_magic)<K_U_) LotSize=lt1*LotExponent;// else LotSize=Lots; return(LotSize); } / Vladimir Karputov 2018.02.16 17:51 #8272 lil_lil:问候。这个问题更像是一个逻辑性问题。所谓的反马太效应系统,对增加的数量有限制。如果你获利平仓,下一手就会增加一个系数。如果出现亏损,或者连续盈利的头寸数量超过指定数量,那么手数就等于起始手数。一旦超过了指定的盈利头寸数量,我如何再次开始增加的循环? / 在止损止盈 代码中的例子:手数大小存储在 "ExtLot "变量中(覆盖、增加和重置为最小值),该变量在全局程序级别(头文件中)声明。OnTradeTransaction()捕捉 "市场退出 "类型的交易,并检查交易是如何关闭的--在获利或止损。 if(deal_entry==DEAL_ENTRY_OUT) { if(deal_reason==DEAL_REASON_SL) ExtLot*=2.0; else if(deal_reason==DEAL_REASON_TP) ExtLot=m_symbol.LotsMin(); } 如果是止损,我们就将手数加倍,如果是止盈,我们就将手数重置为最小值。 注意:在专家顾问本身中,止损和止盈的计算有点不正确 - 但代码将很快重新发布。 lil_lil 2018.02.16 18:09 #8273 Vladimir Karputov:在止损止盈 代码中的例子:手数大小被存储(覆盖、增加和重置为最小值)在全局程序级别(在标题中)声明的 "ExtLot "变量中。OnTradeTransaction()捕捉 "市场退出 "类型的交易,并检查交易是如何关闭的--在获利或止损。 如果是止损,我们就将手数加倍,如果是止盈,我们就将手数重置为最小值。 注意:在专家顾问中,止损和止盈的计算略有不妥 - 但很快就会重新发布代码。我计算连续进行的盈利交易的数量,如果超过5个,那么我就回到初始手数,第6个仓位用初始手数开仓,第7个仓位应该 用成交量=手数6乘以系数开仓,等等。当有5个更有利可图的头寸时,再回到最初的手数。 盈利的头寸是连续的20个。他们的地段应该是1、2、4、8、16、1、2、4、8、16、1、2、4、8、16、1、2、4、8、16 Vladimir Karputov 2018.02.16 19:09 #8274 lil_lil:我计算连续盈利的交易次数,如果超过5次,那么我就回到初始手数,6号仓以初始手数开仓,7号仓应 以成交量=6号仓乘以系数开仓,等等。当有5个更有利可图的头寸时,再回到最初的手数。 盈利的头寸是连续的20个。他们的地段应该是1、2、4、8、16、1、2、4、8、16、1、2、4、8、16、1、2、4、8、16你需要在手数函数中使用一个静态变量。下面是它的工作原理。 //+------------------------------------------------------------------+ //| Test_1.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart(void) { static int counter=0; for(int i=0;i<18;i++) { Print(counter); counter++; if(counter==5) counter=0; } } //+------------------------------------------------------------------+ 结果。 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 附加的文件: Test_1.mq5 2 kb lil_lil 2018.02.16 23:00 #8275 Vladimir Karputov:你需要在手数函数中使用一个静态变量。以下是它的工作原理。 结果。 我根据你的例子进行了重置,但我无法得到批次增加的顺序 有20个有利可图的位置,连续不断。他们的地段应该是1,2,4,8,16,1,2,4,8,16,1,2,4,8,16,1,2,4,8,16, 但是应该是1,2,4,8,16,1,1,1,1,............ 有什么问题吗? int K_U_=5; double Lots=1.0; double LotExponent=2.00; //+------------------------------------------------------------------+ double llot() { double lt1=LotLastCloPos(Symbol(),m_magic); if(CountProfit(Symbol(),m_magic)>=1 && CountProfit(Symbol(),m_magic)<K_U_) LotSize=lt1*LotExponent;// else LotSize=Lots; return(LotSize); } //+------------------------------------------------------------------ int CountProfit(const string Symb,const long MagicNumber=0) { int counter=0; ulong Ticket; if(HistorySelect(0,LONG_MAX)) for(int i=HistoryDealsTotal()-1; i>=0; i--){ if((bool)(Ticket=HistoryDealGetTicket(i)) && (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) && (HistoryDealGetInteger(Ticket, DEAL_MAGIC) == MagicNumber) && (HistoryDealGetString(Ticket, DEAL_SYMBOL) == Symb)) { if(HistoryDealGetDouble(Ticket,DEAL_PROFIT)>0) counter++; else break; } } if(counter==K_U_) counter=0; return(counter); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LotLastCloPos(const string Symb,const long MagicNumber=0) { ulong Ticket; double lot_=0; if(HistorySelect(0,LONG_MAX)) for(int i=0; i<HistoryDealsTotal(); i++) if((bool)(Ticket=HistoryDealGetTicket(i)) && (HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) && (HistoryDealGetInteger(Ticket, DEAL_MAGIC) == MagicNumber) && (HistoryDealGetString(Ticket, DEAL_SYMBOL) == Symb)) { lot_=HistoryOrderGetDouble(Ticket,ORDER_VOLUME_INITIAL); } return(lot_); } Vladimir Karputov 2018.02.17 04:41 #8276 lil_lil:我正在根据你的例子进行归零,但我没有得到批次增加的顺序。 有20个有利可图的位置,连续不断。他们的地段应该是1,2,4,8,16,1,2,4,8,16,1,2,4,8,16,1,2,4,8,16, 结果是这样的1,2,4,8,16,1,1,1 ............ 怎么了? 所以你还是不想以正常方式使用OnTradeTransaction?那么,你更愿意要求精确地记录整个交易历史(自1970年以来)?为什么? lil_lil 2018.02.17 05:57 #8277 Vladimir Karputov:所以你不希望与OnTradeTransaction 正常工作?所以你更愿意要求所有的交易历史(自1970年以来)?为什么?找到了一个理由,托架。 你说我不想是什么意思,OnTradeTransaction 与我的问题有什么关系;) lil_lil 2018.02.17 06:20 #8278 现在,我看到,在我的问题之前的两个帖子,有一个计算的例子。 谢谢你。 Vladimir Karputov 2018.02.17 08:21 #8279 lil_lil:找到了原因,托架。 你说我不想是什么意思,OnTradeTransaction 与我的问题有什么关系;)只是要求提供交易记录 HistorySelect(0,LONG_MAX) 意味着请求获得该交易账户自1970年以来的所有、所有、所有的历史记录。这是非常次优的。 如果该账户有成千上万的交易怎么办?如果(上帝保佑)你在每一次打勾时都提出这样的要求呢? Aleksey Vyazmikin 2018.02.17 13:12 #8280 请分享与交易历史相关的功能。 我需要获得有关最后一笔交易的开盘、收盘、成交量、财务结果及其类型(买入或卖出)的信息。 如果你有任何类似的功能,请分享。 1...821822823824825826827828829830831832833834835...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
/
/
在止损止盈 代码中的例子:手数大小存储在 "ExtLot "变量中(覆盖、增加和重置为最小值),该变量在全局程序级别(头文件中)声明。OnTradeTransaction()捕捉 "市场退出 "类型的交易,并检查交易是如何关闭的--在获利或止损。
如果是止损,我们就将手数加倍,如果是止盈,我们就将手数重置为最小值。
注意:在专家顾问本身中,止损和止盈的计算有点不正确 - 但代码将很快重新发布。
在止损止盈 代码中的例子:手数大小被存储(覆盖、增加和重置为最小值)在全局程序级别(在标题中)声明的 "ExtLot "变量中。OnTradeTransaction()捕捉 "市场退出 "类型的交易,并检查交易是如何关闭的--在获利或止损。
如果是止损,我们就将手数加倍,如果是止盈,我们就将手数重置为最小值。
注意:在专家顾问中,止损和止盈的计算略有不妥 - 但很快就会重新发布代码。
我计算连续进行的盈利交易的数量,如果超过5个,那么我就回到初始手数,第6个仓位用初始手数开仓,第7个仓位应该 用成交量=手数6乘以系数开仓,等等。当有5个更有利可图的头寸时,再回到最初的手数。
盈利的头寸是连续的20个。他们的地段应该是1、2、4、8、16、1、2、4、8、16、1、2、4、8、16、1、2、4、8、16
我计算连续盈利的交易次数,如果超过5次,那么我就回到初始手数,6号仓以初始手数开仓,7号仓应 以成交量=6号仓乘以系数开仓,等等。当有5个更有利可图的头寸时,再回到最初的手数。
盈利的头寸是连续的20个。他们的地段应该是1、2、4、8、16、1、2、4、8、16、1、2、4、8、16、1、2、4、8、16
你需要在手数函数中使用一个静态变量。下面是它的工作原理。
结果。
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2
你需要在手数函数中使用一个静态变量。以下是它的工作原理。
结果。
我根据你的例子进行了重置,但我无法得到批次增加的顺序
有20个有利可图的位置,连续不断。他们的地段应该是1,2,4,8,16,1,2,4,8,16,1,2,4,8,16,1,2,4,8,16, 但是应该是1,2,4,8,16,1,1,1,1,............
有什么问题吗?
我正在根据你的例子进行归零,但我没有得到批次增加的顺序。
有20个有利可图的位置,连续不断。他们的地段应该是1,2,4,8,16,1,2,4,8,16,1,2,4,8,16,1,2,4,8,16, 结果是这样的1,2,4,8,16,1,1,1 ............
怎么了?
所以你还是不想以正常方式使用OnTradeTransaction?那么,你更愿意要求精确地记录整个交易历史(自1970年以来)?为什么?
所以你不希望与OnTradeTransaction 正常工作?所以你更愿意要求所有的交易历史(自1970年以来)?为什么?
找到了一个理由,托架。
你说我不想是什么意思,OnTradeTransaction 与我的问题有什么关系;)
现在,我看到,在我的问题之前的两个帖子,有一个计算的例子。
谢谢你。
找到了原因,托架。
你说我不想是什么意思,OnTradeTransaction 与我的问题有什么关系;)
只是要求提供交易记录
意味着请求获得该交易账户自1970年以来的所有、所有、所有的历史记录。这是非常次优的。
请分享与交易历史相关的功能。
我需要获得有关最后一笔交易的开盘、收盘、成交量、财务结果及其类型(买入或卖出)的信息。
如果你有任何类似的功能,请分享。