错误、漏洞、问题 - 页 857 1...850851852853854855856857858859860861862863864...3184 新评论 Yedelkin 2012.10.14 12:05 #8561 G001: 对不起,我不知道该怎么回答,我不知道问题出在哪里,我知道它不能满足我的需要。 让我们采取最简单的方法:在这部分代码中每一个有意义的行之后,写上Print(),看看打印的 内容。 Andriy Voitenko 2012.10.14 12:07 #8562 //+------------------------------------------------------------------+ //| CalcMartin.mq5 | //| avoitenko | //| https://www.mql5.com/en/users/avoitenko | //+------------------------------------------------------------------+ #property copyright "avoitenko" #property link "https://www.mql5.com/en/users/avoitenko" #property version "1.00" #property script_show_inputs input bool Martingale=true; input uint MaxLossTrade=5; input double StartLot=0.1; input double LotMultiply=2; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { double ResultLot=StartLot; //----- Martingale if(Martingale) { HistorySelect(0,TimeCurrent()); int Total=HistoryDealsTotal(); int Losses=0; // Number of losses orders without a break for(int i=Total-1;i>=0;i--) { ulong Ticket=HistoryDealGetTicket(i); if((HistoryDealGetInteger(Ticket,DEAL_TYPE)==DEAL_TYPE_BUY || HistoryDealGetInteger(Ticket,DEAL_TYPE)==DEAL_TYPE_SELL) && (HistoryDealGetInteger(Ticket,DEAL_ENTRY)==DEAL_ENTRY_INOUT || HistoryDealGetInteger(Ticket,DEAL_ENTRY)==DEAL_ENTRY_OUT)) { double profit=HistoryDealGetDouble(Ticket,DEAL_PROFIT)+HistoryDealGetDouble(Ticket,DEAL_SWAP); if(profit>=0) break; Losses++; } if(Losses<=MaxLossTrade)ResultLot=(StartLot*MathPow(LotMultiply,Losses)); else {ResultLot=StartLot;break;} } } //----- Print("Result Lot = ",ResultLot); } //+------------------------------------------------------------------+ [删除] 2012.10.14 12:32 #8563 avoitenko: 非常感谢你,理解了我的错误。抱歉我的直言不讳。 [删除] 2012.10.14 22:38 #8564 我怎样才能得到一年和一个月的天数呢? 就通过预写吗?就像月号是如果是一月,那么就是31,等等?那一年呢? Mykola Demko 2012.10.15 12:33 #8565 FiftyStars:我怎样才能得到一年和一个月的天数呢? 就通过预写吗?就像月号是如果是一月,那么就是31,等等?那一年呢? 如果除以4则为高,其余为365。 Ilyas 2012.10.15 12:45 #8566 Urain: 如果你除以4,就是高,剩下的就是365。 然而,也有例外......尽管你可以忽略它们 :) Dimitar Manov 2012.10.15 12:49 #8567 Urain: 如果能被4除以,则为高,其余为365。2100也能被4整除,但它是3651900年也... Andriy Voitenko 2012.10.15 13:09 #8568 mql5: 然而,也有例外......尽管你可以忽略它们 :)下面是有例外情况的代码,但只适用于我们这个时代。如果该年是闰年,该函数返回真。bool IsLeapYear(int year) { return(MathMod(year,4)==0 && (MathMod(year,100)!=0 || MathMod(year,400)==0)); } Mykola Demko 2012.10.15 13:55 #8569 avoitenko:这里是有例外情况的代码,但只适用于我们的时代。如果该年是闰年,该函数返回真。正是如此,但我会以不同的方式来做......。所以如果条件为真,就不需要做下一步的检查。bool IsLeapYear(int year) { if(year%4!=0)return(false); else { if(year%100==0) { if(year%400==0)return(true); else return(false); } else return(true); } }大多数年份在第一次检查中都会出现假的情况。如果年份能被4整除,那么我们就检查它是否能被100整除,剩下的大部分都不能被整除,这将是真的。如果它是可分的,那么我们检查第三个条件,即年份是否可被400整除。因此,只有最低限度的部分年份将在所有三个条件下进行测试(这在统计上是不明显的,不会影响性能)。这样一个函数的速度将趋于一个检查的速度,而你有两个检查的速度。而且我认为通过刷卡的方式,天数会更好。int CountDayforMonth(int month,bool leapyear=false)// количество дней в месяце { switch(month) { case 1: return(31); case 2: if(leapyear)return(29);else return(28); case 3: return(31); case 4: return(30); case 5: return(31); case 6: return(30); case 7: return(31); case 8: return(31); case 9: return(30); case 10: return(31); case 11: return(30); case 12: return(31); default:return(0); } } [删除] 2012.10.15 15:10 #8570 Urain:正是如此,但我会以不同的方式来做......。因此,如果条件奏效,就没有必要再做检查。大多数年份在第一次检查时都会显示为虚假。如果年份能被4整除,那么我们就检查它是否能被100整除,剩下的大部分年份都不能被整除,我们就退出为真。如果它是可分的,那么我们检查第三个条件,即年份是否可被400整除。因此,只有最低限度的部分年份将在所有三个条件下进行测试(这在统计上是不明显的,不会影响性能)。这样一个函数的性能将趋向于一次检查的速度,而你的性能将趋向于两次检查的速度。我已经确定了int GetDaysInYear(int Year) export { bool Leap=false; if(Year%4==0) { if(Year%100==0) { if(Year%400==0) Leap=true; } else Leap=true; } if(Leap) return(366); else return(365); } 1...850851852853854855856857858859860861862863864...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
非常感谢你,理解了我的错误。
抱歉我的直言不讳。
我怎样才能得到一年和一个月的天数呢? 就通过预写吗?就像月号是如果是一月,那么就是31,等等?
那一年呢?
我怎样才能得到一年和一个月的天数呢? 就通过预写吗?就像月号是如果是一月,那么就是31,等等?
那一年呢?
如果你除以4,就是高,剩下的就是365。
如果能被4除以,则为高,其余为365。
2100也能被4整除,但它是365
1900年也...
然而,也有例外......尽管你可以忽略它们 :)
下面是有例外情况的代码,但只适用于我们这个时代。如果该年是闰年,该函数返回真。
这里是有例外情况的代码,但只适用于我们的时代。如果该年是闰年,该函数返回真。
正是如此,但我会以不同的方式来做......。所以如果条件为真,就不需要做下一步的检查。
大多数年份在第一次检查中都会出现假的情况。
如果年份能被4整除,那么我们就检查它是否能被100整除,剩下的大部分都不能被整除,这将是真的。
如果它是可分的,那么我们检查第三个条件,即年份是否可被400整除。
因此,只有最低限度的部分年份将在所有三个条件下进行测试(这在统计上是不明显的,不会影响性能)。
这样一个函数的速度将趋于一个检查的速度,而你有两个检查的速度。
而且我认为通过刷卡的方式,天数会更好。
正是如此,但我会以不同的方式来做......。因此,如果条件奏效,就没有必要再做检查。
大多数年份在第一次检查时都会显示为虚假。
如果年份能被4整除,那么我们就检查它是否能被100整除,剩下的大部分年份都不能被整除,我们就退出为真。
如果它是可分的,那么我们检查第三个条件,即年份是否可被400整除。
因此,只有最低限度的部分年份将在所有三个条件下进行测试(这在统计上是不明显的,不会影响性能)。
这样一个函数的性能将趋向于一次检查的速度,而你的性能将趋向于两次检查的速度。
我已经确定了