MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1561 1...155415551556155715581559156015611562156315641565156615671568...1953 新しいコメント Eugen8519 2021.08.02 21:24 #15601 MakarFX: を削除しないでください。 私が書いたように符号を変更する必要があります。 それでやってみたら、いつも通り5つの契約まで開くんです。 Tretyakov Rostyslav 2021.08.02 21:26 #15602 Eugen8519:ということで、変更してみたところ、通常通り5契約まで開くようになりました。 OnTick()のコードを投稿する Mihail Matkovskij 2021.08.02 21:28 #15603 MakarFX:そして、合計してその期間の全体の利益を計算します。 また誤解していますね。利益を計算したいと言っていた。この関数は、最後に閉じた注文の損失を計算しようとしましたが、正しく計算されませんでした。だから、結局はみんなを混乱させたんです。 Eugen8519 2021.08.02 21:29 #15604 MakarFX: OnTick()のコードを投稿する void OnTick() { double close1 = iClose(_Symbol,Timeframe,1); datetime time_0=iTime(0); if(TimeBar==time_0) return; if(TimeBar==0) { TimeBar=time_0; return; }//first program run double EMA0[],EMA_TREND[],WMA0[]; //--- int start_pos=1,count=3; if(!iGetArray(handle_iMA_EMA,0,start_pos,count,EMA0)) return; if(!iGetArray(handle_iMA_EMA_TREND,0,start_pos,count,EMA_TREND)) return; if(!iGetArray(handle_iMA_WMA,0,start_pos,count,WMA0)) return; //--- if(UseTimeLimit) { YesStop=true; MqlDateTime str1; TimeToStruct(TimeCurrent() , str1); if(str1.hour > startHour && str1.hour < stopHour) YesStop=false; } if(YesStop==false) { ulong m_ticket=0; double SEma,LEma; SEma = iMAGet(handle_iMA_WMA,0); LEma = iMAGet(handle_iMA_EMA,0); static int isCrossed=0; if(!Reverse) isCrossed=Crossed(LEma,SEma); else isCrossed=Crossed(SEma,LEma); //--- if(!RefreshRates()) return; //--- bool condition1 = (close1 > EMA_TREND[0]); bool condition2 = (isCrossed==1); { { int pos_total=PositionsTotal(); { if(condition1 && condition2 && pos_total==0 ) { if(!RefreshRates()) return; TimeBar=time_0; my_TP = m_symbol.Ask() + ExtTakeProfit*Point(); my_SL = m_symbol.Ask() - ExtStopLoss*Point(); my_lot = Lots; OPENORDER("Buy"); CLOSEORDER("Sell"); } } bool condition3 = (close1 < EMA_TREND[0]); bool condition4 = (isCrossed==2); if(condition3 && condition4 && pos_total==0 ) { if(!RefreshRates()) return; TimeBar=time_0; my_TP = m_symbol.Bid() - ExtTakeProfit*Point(); my_SL = m_symbol.Bid() + ExtStopLoss*Point(); my_lot= Lots; OPENORDER("Sell"); CLOSEORDER("Buy"); } } } if(UseTimeLimitClose) { MqlDateTime TimeNow; TimeToStruct(TimeCurrent(),TimeNow); if ( TimeNow.day_of_week >= closday && TimeNow.hour >= Close_Hour && TimeNow.min >= Close_min ) { CloseAllPositions(); } } //--- TrailingOrder(); Trailing(); //--- return; } } //-------------------------------------------------------------------- void CLOSEORDER(string ord) { for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY && ord=="Buy") m_trade.PositionClose(m_position.Ticket()); // Close Buy if(m_position.PositionType()==POSITION_TYPE_SELL && ord=="Sell") m_trade.PositionClose(m_position.Ticket()); // Close Sell } } //-------------------------------------------------------------------- void CloseAllPositions() { for(int i=PositionsTotal()-1; i>=0 && !IsStopped(); i--) { if(m_position.SelectByIndex(i)) { //--- trading object m_trade.SetExpertMagicNumber(m_position.Magic()); m_trade.SetTypeFillingBySymbol(m_position.Symbol()); //--- close positions if(m_trade.PositionClose(m_position.Ticket()) && (m_trade.ResultRetcode()==TRADE_RETCODE_DONE || m_trade.ResultRetcode()==TRADE_RETCODE_PLACED)) PrintFormat("Position #%I64u on %s to be closed",m_position.Ticket(),m_position.Symbol()); else PrintFormat("> Error closing position #%I64u on %s (%s)",m_position.Ticket(),m_position.Symbol(),m_trade.ResultComment()); } } } //-------------------------------------------------------------------- void OPENORDER(string ord) { double priceL=m_symbol.Ask(); if(ord=="Sell") //--- check for free money if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,my_lot,priceL)<0.0) printf("We have no money. Free Margin = %f",m_account.FreeMargin()); else if(!m_trade.Sell(my_lot,Symbol(),m_symbol.Bid(),my_SL,my_TP,"")) Print("BUY_STOP -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of Retcode: ",m_trade.ResultRetcodeDescription(), ", ticket of order: ",m_trade.ResultOrder()); // Если sell, то не открываемся double priceS=m_symbol.Bid(); if(ord=="Buy") //--- check for free money if(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,my_lot,priceS)<0.0) printf("We have no money. Free Margin = %f",m_account.FreeMargin()); else if(!m_trade.Buy(my_lot,Symbol(),m_symbol.Ask(),my_SL,my_TP,"")) Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription(), ", ticket of deal: ",m_trade.ResultDeal()); return; } double iMAGet(const int handle,const int index) { double MA[]; ArraySetAsSeries(MA,true); //--- reset error code ResetLastError(); //--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index if(CopyBuffer(handle,0,0,index+1,MA)<0) { //--- if the copying fails, tell the error code PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(0.0); } return(MA[index]); } //+------------------------------------------------------------------+ //| Refreshes the symbol quotes data | //+------------------------------------------------------------------+ bool RefreshRates() { //--- refresh rates if(!m_symbol.RefreshRates()) return(false); //--- protection against the return value of "zero" if(m_symbol.Ask()==0 || m_symbol.Bid()==0) return(false); //--- return(true); } //+------------------------------------------------------------------+ //| Get Time for specified bar index | //+------------------------------------------------------------------+ datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT) { if(symbol==NULL) symbol=Symbol(); if(timeframe==0) timeframe=Period(); datetime Time[]; datetime time=0; ArraySetAsSeries(Time,true); int copied=CopyTime(symbol,timeframe,index,1,Time); if(copied>0) time=Time[0]; return(time); } //+------------------------------------------------------------------+ //| Get value of buffers | //+------------------------------------------------------------------+ bool iGetArray(const int handle,const int buffer,const int start_pos, const int count,double &arr_buffer[]) { bool result=true; if(!ArrayIsDynamic(arr_buffer)) { PrintFormat("ERROR! EA: %s, FUNCTION: %s, this a no dynamic array!",__FILE__,__FUNCTION__); return(false); } ArrayFree(arr_buffer); //--- reset error code ResetLastError(); //--- fill a part of the iBands array with values from the indicator buffer int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer); if(copied!=count) { //--- if the copying fails, tell the error code PrintFormat("ERROR! EA: %s, FUNCTION: %s, amount to copy: %d, copied: %d, error code %d", __FILE__,__FUNCTION__,count,copied,GetLastError()); //--- quit with zero result - it means that the indicator is considered as not calculated return(false); } return(result); } void TrailingOrder() { int pos_total=PositionsTotal(); if(InpTrailingOrderLimit==0) return; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep) if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep)) OPENORDER("Buy"); } else { if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep) if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep)))) OPENORDER("Sell"); } } } void Trailing() { if(InpTStop==0) return; if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTStop+ExtTStep) if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTStop+ExtTStep)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTStepShift), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } else { if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTStop+ExtTStep) if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTStop+ExtTStep))) || (m_position.StopLoss()==0)) { if(!m_trade.PositionModify(m_position.Ticket(), m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTStepShift), m_position.TakeProfit())) Print("Modify ",m_position.Ticket(), " Position -> false. Result Retcode: ",m_trade.ResultRetcode(), ", description of result: ",m_trade.ResultRetcodeDescription()); } } } } //+------------------------------------------------------------------+ pos_total<=2が削除されました。 Tretyakov Rostyslav 2021.08.02 21:36 #15605 Eugen8519: 線を引く OPENORDER("Buy"); と置き換えてください。 if (PositionsTotal()<=2) { OPENORDER("Buy"); } 線を引く OPENORDER("Sell"); に置き換えてください。 if (PositionsTotal()<=2) { OPENORDER("Sell"); } Tretyakov Rostyslav 2021.08.02 21:40 #15606 Mihail Matkovskij:また誤解していますね。利益を計算したいと言っていた。この関数は、最後に決済された注文の損失を計算しようとしましたが、正しく計算されませんでした。だから、最後はみんなを混乱させたんです。 利益がマイナスになることもあるとご自身でおっしゃっていましたが、トレードのトータルの利益をプラスにしたい、マイナスにしたいとのことでした。 Eugen8519 2021.08.02 21:44 #15607 MakarFX:線を引くと置き換えてください。線を引く と置き換えてください。 if(InpTrailingOrderLimit==0) return; for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingOrderLimit+ExtTrailingOrderStep) if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingOrderLimit+ExtTrailingOrderStep)) if (PositionsTotal()<=2) { OPENORDER("Buy"); } } else { if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingOrderLimit+ExtTrailingOrderStep) if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingOrderLimit+ExtTrailingOrderStep)))) if (PositionsTotal()<=2) { OPENORDER("Sell"); } そのように入れると、2つの契約でまだ無制限です Mihail Matkovskij 2021.08.02 21:46 #15608 MakarFX: 利益がマイナスになる可能性があるとご自身でおっしゃっていましたが、トレードのトータルの利益をプラスにしたいのかマイナスにしたいのか つまり、利益はプラスになった場合のみ合算されるのです。マイナスであれば、損失です。総利益を知りたい場合は、マイナスも含めてすべての利益を合計する。この関数は最後の注文の利益を求めようとしますが、間違っていて、lastlossと呼ばれています。わからないのか?あらら...疲れました...。 Tretyakov Rostyslav 2021.08.02 21:47 #15609 Eugen8519:このように入れましたが、2つの契約で無制限なのは変わりません。 にはない void OnTick Valeriy Yastremskiy 2021.08.02 21:47 #15610 MakarFX:そして、合計してその期間の全体の利益を計算します。"そして、なぜスワップやコミッションを利益に上乗せしているのですか?一方、 OrderProfit() ネガティブにもなりうる...また、1件または数件のマッチングオーダーを処理するだけで、すべてのオーダーを処理しない場合、トータルの利益はどのようになるのでしょうか?"何かお互いにすごく混乱したんです。発言で大丈夫だった、負の数の足し算引き算の話ではない)答えはどっちも嫌だ Seek, it's there) 1...155415551556155715581559156015611562156315641565156615671568...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
を削除しないでください。
私が書いたように符号を変更する必要があります。
それでやってみたら、いつも通り5つの契約まで開くんです。
ということで、変更してみたところ、通常通り5契約まで開くようになりました。
そして、合計してその期間の全体の利益を計算します。
また誤解していますね。利益を計算したいと言っていた。この関数は、最後に閉じた注文の損失を計算しようとしましたが、正しく計算されませんでした。だから、結局はみんなを混乱させたんです。
OnTick()のコードを投稿する
線を引く
OPENORDER("Buy");と置き換えてください。
線を引く
OPENORDER("Sell");に置き換えてください。
また誤解していますね。利益を計算したいと言っていた。この関数は、最後に決済された注文の損失を計算しようとしましたが、正しく計算されませんでした。だから、最後はみんなを混乱させたんです。
線を引く
と置き換えてください。
線を引く
と置き換えてください。
そのように入れると、2つの契約でまだ無制限です
利益がマイナスになる可能性があるとご自身でおっしゃっていましたが、トレードのトータルの利益をプラスにしたいのかマイナスにしたいのか
つまり、利益はプラスになった場合のみ合算されるのです。マイナスであれば、損失です。総利益を知りたい場合は、マイナスも含めてすべての利益を合計する。この関数は最後の注文の利益を求めようとしますが、間違っていて、lastlossと呼ばれています。わからないのか?あらら...疲れました...。
このように入れましたが、2つの契約で無制限なのは変わりません。
にはない void OnTick
そして、合計してその期間の全体の利益を計算します。
ネガティブにもなりうる...
また、1件または数件のマッチングオーダーを処理するだけで、すべてのオーダーを処理しない場合、トータルの利益はどのようになるのでしょうか?"
何かお互いにすごく混乱したんです。発言で大丈夫だった、負の数の足し算引き算の話ではない)
答えはどっちも嫌だ Seek, it's there)