MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 475 1...468469470471472473474475476477478479480481482...1953 新しいコメント Rewerpool 2018.02.21 16:34 #4741 Artyom Trishkin@Konstantin Nikitin 教えてください、 int startを通してvoid NOTIFICATION() 関数をポーリングするのは正しいのでしょうか? そこには、一定のループがあるのですもしかしたら、このロジックを直接startに入れた方が正しいのでは?関数をオーバーロードしないように!それに、もともと自分で読んだ方が気持ちいいように書いていますよ Artyom Trishkin 2018.02.21 16:40 #4742 Rewerpool:Artyom Trishkin@Konstantin Nikitin 教えてください、 int startを通してvoid NOTIFICATION() 関数をポーリングするのは正しいのでしょうか? そこには、一定のループがあるのですこのロジックを一気にスタートさせた方が論理的かも? OnTick()を使用します。すべては必要なロジックに依存します。 Vladimir Ozharovskiy 2018.02.21 16:50 #4743 どこに挿入すればいいか教えてください//+----------------------------------------------------------------------------- +.//| Проверяет объем ордера на корректность | //+------------------------------------------------------------------+ bool CheckVolumeValue(double volume,string &description) { //--- минимально допустимый объем для торговых операций double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(volume<min_volume) { description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume); return(false); } //--- максимально допустимый объем для торговых операций double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); if(volume>max_volume) { description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume); return(false); } //--- получим минимальную градацию объема double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); int ratio=(int)MathRound(volume/volume_step); if(MathAbs(ratio*volume_step-volume)>0.0000001) { description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f", volume_step,ratio*volume_step); return(false); } description="Корректное значение объема"; return(true); } Vladimir Ozharovskiy 2018.02.21 17:08 #4744 Expert Advisorのコード本体 列挙子{e=1, // パラボリック指標による};列挙型tf{af=0, // 現在のbf=1, // 1分cf=2, // 5分df=3, // 15分ef=4, // 30分ff=5, // 1時間gf=6, // 4時間hf=7, // 1日};extern int Magic = 123654789;extern inttern スリッページ = 0;inttern double Lots = 1;extern int int rsi_period = 14;extern int rsi_high = 50;int rsi_price = PRICE_CLOSE;extern int rsi_low = 50;int loss_stop = 5000;extern int take_profit = 5000;double sar_step = 0.03。double sar_max = 0.03。int GeneralNoLoss = false; // 損益分岐点からの引き離しint parameters_trailing = e; // トロールメソッドint StartTrall = -5000; // トロールの最小利益(ポイント数int StepTrall = 1; //ステップトレーリングストップロス入力 tf TF_Tralling = af; // インジケータタイムフレーム(0-現在)。extern int delta = 50; // 計算されたストップロス・レベルからのインデントdouble Step = 0.03; //パラボリックステップ(方法4)double Maximum = 0.03; //放物線状の最大値(方法4)color text_color = Lime; //情報出力の色二重マ、RSI、SAR_1、SAR_2、マ_1、マ_2、マ_3、マ_4、マ_5、マ_6。datetime LastBuyTime, LastSellTime;int STOPLEVEL;int TF[10]={0,1,5,15,30,60,240,1440,10080,43200};ダブル SLB=0,SLS=0;int OnInit(){//---//---return(0)です。}void OnTick(){。STOPLEVEL=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);int b=0,s=0;double OOP,price_b=0,price_s=0,lot=0,NLb=0,NLs=0,LS=0,LB=0です。int tip,Ticket。ブールエラーです。ダブルSL,OSL;int n=0;if (b==0) SLB=0;if (s==0) SLS=0;for (int i=OrdersTotal(); i>=0; i--){if (OrderSelect(i, SELECT_BY_POS)==true){tip = OrderType();if (tip<2 && (OrderSymbol()==Symbol()))&& (注文マジックナンバー()==マジック)){OSL = OrderStopLoss()です。OOP = OrderOpenPrice()。Ticket = OrderTicket();n++;if (tip==OP_BUY){if (GeneralNoLoss){SL = SlLastBar(OP_BUY,Bid,NLb)。if (SL < NLb+StartTrall*Point) continue;}さもなくば{SL = SlLastBar(OP_BUY,Bid,OOP)。if (SL < OOP+StartTrall*Point) continue;}//if (OSL >= OOP && only_NoLoss) continue;if (SL >= OSL + StepTrall*Point && (Bid-SL)/Point>STOPLEVEL)。{error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,White);if (!error) Comment("TrailingStop Error ",GetLastError()," order ",Ticket," SL ",SL).If (!error) Comment("TrailingStop Error ",GetLastError()," order ",Ticket," SL ",SL);else Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));}}if (tip==OP_SELL){if (GeneralNoLoss){SL = SlLastBar(OP_SELL,Ask,NLs)。if (SL > NLs-StartTrall*Point) continue;}さもなくば{SL = SlLastBar(OP_SELL,Ask,OOP)です。if (SL > OOP-StartTrall*Point) continue;}//if (OSL <= OOP && only_NoLoss) continue;if ((SL <= OSL-StepTrall*Point || OSL==0) && (SL-Ask)/Point>STOPLEVEL){error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,White);if (!error) Comment("TrailingStop Error ",GetLastError()," order ",Ticket," SL ",SL).If (!error) Comment("TrailingStop Error ",GetLastError()," order ",Ticket," SL ",SL);else Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));}}}}}ma = iMA(Symbol(), 0, 70, 0, MODE_SMA, PRICE_CLOSE, 1);rsi = iRSI(Symbol(), 0, rsi_period, rsi_price, 1);sar_1 = iSAR(Symbol(), 0, sar_step, sar_max, 1);sar_2 = iSAR(Symbol(), 0, sar_step, sar_max, 2);if ((sar_step)){LastBuyTime = Time[0];if(OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask,Digits), Slippage, Ask - loss_stop*Point, Ask + take_profit*Point, "Order", Magic, 0, clrGreen) > 0){ (オーダー送信)Print("買い注文が送信されました!");を返します。}else Print("買い注文エラー");}if ((フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ)){LastSellTime = Time[0];if(OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid, Digits), Slippage, Bid + loss_stop*Point, Bid - take_profit*Point, "Order", Magic, 0, clrRed) > 0){Print("売り注文が送信されました!");を返します。}else Print("Sell Order Error");}}//--------------------------------------------------------------------double SlLastBar(int tip,double price,double OOP){double prc=0;switch(パラメータ_trailing){ケース1: // パラボリックインジケーターによるprc = iSAR(Symbol(),TF[TF_Tralling],Step,Maximum,0)。if (tip==OP_BUY){prc = NormalizeDouble(prc - delta*Point,Digits);if(price-STOPLEVEL*Point < prc) prc=0;ARROW("cm_SL_Buy", prc, 4, clrAqua);}if (tip==OP_SELL){prc = NormalizeDouble(prc + delta*Point,Digits);if(price+STOPLEVEL*Point > prc) prc=0;ARROW("cm_SL_Sell", prc, 4, clrRed);}が壊れる。}return(prc)です。}//--------------------------------------------------------------------文字列 StrPer(int per){if (per == 0) per=Period();if (per == 1) return("M1");if (per == 5) return("M5");if (per == 15) return("M15");if (per == 30) return("M30");if (per == 60) return("H1");if (per == 240) return("H4");if (per == 1440) return("D1");if (per == 10080) return("W1")if (per == 43200) return("MN1")return("ピリオドエラー");}//+------------------------------------------------------------------+void ARROW(string 名前, double 価格, int ARROWCODE, 色 c){ObjectDelete(Name)です。ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0)です。ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE)です。ObjectSetInteger(0,Name,OBJPROP_SELECTABLE, false)を使用します。ObjectSetInteger(0,Name,OBJPROP_SELECTED, false)を使用します。ObjectSetInteger(0,Name,OBJPROP_COLOR, c)です。ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1)を使用します。}//--------------------------------------------------------------------カラー カラー(bool P,color a,color b){if (P) return(a);return(b)です。}//-------------------------------------------------------------------- Any questions from newcomers アドバイザーの戦略リファイン strategy refinement of the Alekseu Fedotov 2018.02.21 17:09 #4745 Vladimir Ozharovskiy: これをどこに挿入すればいいのか、教えてください。さて...しからば ようにする //+------------------------------------------------------------------+ //| Проверяет объем ордера на корректность | //+------------------------------------------------------------------+ ナイス(^^))) Vladimir Ozharovskiy 2018.02.21 17:12 #4746 Alekseu Fedotov:さて...しからば ようにする (美しい...)))でも、マジか(笑) Alekseu Fedotov 2018.02.21 17:21 #4747 Vladimir Ozharovskiy:でもマジか(笑)関数そのものを指しているのであれば、コピーしてプログラムの一番最後に貼り付けてください。 必ずしも void OnTick() 関数の外側である必要はありません。 Rewerpool 2018.02.21 17:30 #4748 Vladimir Ozharovskiy:でも、マジか(笑)この機能には入札、チェック、レポートが ないのですね。 Rewerpool 2018.02.21 17:32 #4749 Alekseu Fedotov:関数そのものを意味するのであれば、コピーしてプログラムの最後に貼り付けてください。 void OnTick()関数の外側にあることを確認します。では、男はどうすればいいのか?正しく呼ばなければならない! Vladimir Ozharovskiy 2018.02.21 18:14 #4750 助かったような...。ありがとうございました。 1...468469470471472473474475476477478479480481482...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Artyom Trishkin@Konstantin Nikitin
教えてください、 int startを通してvoid NOTIFICATION() 関数をポーリングするのは正しいのでしょうか? そこには、一定のループがあるのですもしかしたら、このロジックを直接startに入れた方が正しいのでは?関数をオーバーロードしないように!それに、もともと自分で読んだ方が気持ちいいように書いていますよ
Artyom Trishkin@Konstantin Nikitin
教えてください、 int startを通してvoid NOTIFICATION() 関数をポーリングするのは正しいのでしょうか? そこには、一定のループがあるのですこのロジックを一気にスタートさせた方が論理的かも?
Expert Advisorのコード本体
これをどこに挿入すればいいのか、教えてください。
さて...しからば
ようにする
ナイス(^^)))
さて...しからば
ようにする
(美しい...)))
でも、マジか(笑)
でもマジか(笑)
関数そのものを指しているのであれば、コピーしてプログラムの一番最後に貼り付けてください。
必ずしも void OnTick() 関数の外側である必要はありません。
でも、マジか(笑)
この機能には入札、チェック、レポートが ないのですね。
関数そのものを意味するのであれば、コピーしてプログラムの最後に貼り付けてください。
void OnTick()関数の外側にあることを確認します。
では、男はどうすればいいのか?正しく呼ばなければならない!