エラー、バグ、質問 - ページ 857 1...850851852853854855856857858859860861862863864...3185 新しいコメント 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 1年と1ヶ月の日数を求めるにはどうしたらいいのでしょうか? 月番は1月なら31日など、あらかじめ書いておくのでしょうか?年は? Mykola Demko 2012.10.15 12:33 #8565 FiftyStars:1年と1ヶ月の日数を求めるにはどうしたらいいのでしょうか? 月番は1月なら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で割り切れるが、365である1900も...。 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で割り切れるかどうかを調べると、残りのほとんどは割り切れないので、偽になります。で割り切れるなら、3番目の条件として、年が400で割り切れるかどうかをチェックします。したがって、3つの条件すべてにおいて、最小限の年数の部分しかテストされない(これは統計的に重要ではなく、性能に影響を与えない)。このような機能のスピードは、2回分のチェックのスピードを持っているのに対して、1回分のチェックのスピードに傾くことになります。あと、日数はスワイプの方がいいと思います。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:その通りですが、私なら違う方法で...。ですから、その条件がうまくいったのであれば、改めてチェックをする必要はないのです。ほとんどの年は1回目のチェックで偽と出ます。年が4で割り切れるなら、100で割り切れるかどうかを調べ、残りの年のほとんどは割り切れないので、trueとして終了します。で割り切れるなら、3番目の条件として、年が400で割り切れるかどうかをチェックします。したがって、3つの条件すべてにおいて、最小限の年数の部分しかテストされない(これは統計的に重要ではなく、性能に影響を与えない)。このような機能の性能は、1回のチェックの速さに傾き、あなたの場合は2回のチェックの速さに傾くでしょう。に落ち着きました。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...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私の間違いを理解していただき、ありがとうございました。
ぶっきらぼうで申し訳ありません。
1年と1ヶ月の日数を求めるにはどうしたらいいのでしょうか? 月番は1月なら31日など、あらかじめ書いておくのでしょうか?
年は?
1年と1ヶ月の日数を求めるにはどうしたらいいのでしょうか? 月番は1月なら31日など、あらかじめ書いておくのでしょうか?
年は?
4で割ればハイ、残りは365です。
4で割り切れる場合はハイ、それ以外は365。
2100も4で割り切れるが、365である
1900も...。
ただし、例外もあります...無視してもいいんですけどね :)
以下は、例外を除き、我々の時代だけのコードです。この関数は、年がうるう年である場合に真を返す。
以下、例外を除き、私たちの時代だけのコードです。この関数は、年がうるう年である場合に真を返す。
その通りですが、私ならもっと違うやり方をしていたでしょう...。ということで、条件が真であれば、次のチェックは必要ありません。
ほとんどの年は、最初のチェックで偽物と出てしまいます。
年が4で割り切れるなら、100で割り切れるかどうかを調べると、残りのほとんどは割り切れないので、偽になります。
で割り切れるなら、3番目の条件として、年が400で割り切れるかどうかをチェックします。
したがって、3つの条件すべてにおいて、最小限の年数の部分しかテストされない(これは統計的に重要ではなく、性能に影響を与えない)。
このような機能のスピードは、2回分のチェックのスピードを持っているのに対して、1回分のチェックのスピードに傾くことになります。
あと、日数はスワイプの方がいいと思います。
その通りですが、私なら違う方法で...。ですから、その条件がうまくいったのであれば、改めてチェックをする必要はないのです。
ほとんどの年は1回目のチェックで偽と出ます。
年が4で割り切れるなら、100で割り切れるかどうかを調べ、残りの年のほとんどは割り切れないので、trueとして終了します。
で割り切れるなら、3番目の条件として、年が400で割り切れるかどうかをチェックします。
したがって、3つの条件すべてにおいて、最小限の年数の部分しかテストされない(これは統計的に重要ではなく、性能に影響を与えない)。
このような機能の性能は、1回のチェックの速さに傾き、あなたの場合は2回のチェックの速さに傾くでしょう。
に落ち着きました。