MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1632 1...162516261627162816291630163116321633163416351636163716381639...1953 新しいコメント Tretyakov Rostyslav 2021.09.29 10:58 #16311 amsgif80 #:挿入しようとしたコードはこれです。コードの先頭にこれを投げる:enum ENUM_DIRECTION{DIRECTION_BUY = 0, // 買いのみDIRECTION_SELL = 1, // 唯一の販売DIRECTION_ANY = 2, // 買い&販売};入力 ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 許可された取引の方向さらにコードで買うとどこに売って開く場所を見つけて ください。start() または OnTick() 関数の内部を見る条件に買いがある場合追加:if(inp_direction!=DIRECTION_SELL)条件に売りがある場合追加:if(inp_direction!=DIRECTION_BUY)です。 どこに置いたんだ? amsgif80 2021.09.29 11:02 #16312 MakarFX #: どこに入れたんですか? //+------------------------------------------------------------------+ | 移動平均.mq5 //| 著作権:2009-2013, MetaQuotes Software Corp. //|https://www.mql5.com| //+------------------------------------------------------------------+ #property copyright "Copyright 2009-2013, MetaQuotes Software Corp. #プロパティリンク"https://www.mql5.com" #property version "1.00" enum ENUM_DIRECTION{ DIRECTION_BUY = 0, // 買いのみ DIRECTION_SELL = 1, // 売りのみ DIRECTION_ANY = 2, // 買いと売り }; input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 取引可能な方向 #include <TradeTrade.mqh> input double MaximumRisk = 0.02; // 最大リスク(パーセント表示 input double DecreaseFactor = 3; // デクリリースファクター input int MovingPeriod = 12; // 移動平均の期間 input int MovingShift = 6; // 移動平均のシフト量 //--- int ExtHandle=0; //+------------------------------------------------------------------+ //| 専門家による初期化機能 //+------------------------------------------------------------------+ int OnInit(void) { //--- ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE); if(ExtHandle==INVALID_HANDLE) { printf("Error creating MA indicator"); return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| エキスパートティック機能 //+------------------------------------------------------------------+ void OnTick(void) { //--- if(PositionSelect(_Symbol)) CheckForClose()。 さもなくば CheckForOpen()です。 //--- } //+------------------------------------------------------------------+ //| 専門家による初期化関数 //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| 最適なロットサイズを計算する //+------------------------------------------------------------------+ Double TradeSizeOptimized(void) { 倍価格=0. ダブルマージン=0.0 //--- ロットサイズを計算する if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,価格)) return(0.0); if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) return(0.0); if(マージン<=0.0) return(0.0); double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/margin,2); //--- 負け続けている取引の長さを計算します。 if(DecreaseFactor>0) { //--- 全取引履歴を要求する HistorySelect(0,TimeCurrent())。 //-- int orders=HistoryDealsTotal(); //総取引件数 int losses=0; // 一連の負けトレードの数 for(int i=orders-1;i>=0;i--) { ulong ticket=HistoryDealGetTicket(i)。 if(ticket=0)の場合 { Print("HistoryDealGetTicketに失敗しました、取引履歴がありません"); が壊れる。 } //--- トレードシンボルのチェック if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Symbol)。 を続ける。 //--- 利益を確認する double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); if(profit>0.0)の場合 が壊れる。 if(profit<0.0)の場合 の損失が発生します。 } //--- if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1)となります。 } //--- 取引量の正規化および許容値のチェック double stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP); lot=stepvol*NormalizeDouble(lot/stepvol,0) とする。 double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN); if(lot<minvol) lot=minvol; double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX); if(lot>maxvol) lot=maxvol; //---取引数量の値を返す return(lot)です。 } //+------------------------------------------------------------------+ ///オープンポジションの状態を確認する| //+------------------------------------------------------------------+ void CheckForOpen(void) { MqlRates rt[2]です。 //--- 値段をコピーする if(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of ",_Symbol," failed, no history"); を返します。 } //--新しいバーの最初のティックでのみ取引する if(rt[1].tick_volume>1)とする。 を返します。 //--- 移動平均の現在値を取得 double ma[1]; if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)。 { Print("CopyBuffer from iMA failed, no data"); を返します。 } //--- シグナルチェック ENUM_ORDER_TYPE signal=WRONG_VALUE。 if(rt[0].open>ma[0] && rt[0].close<ma[0]) signal=ORDER_TYPE_SELL; // 売りの条件 if(inp_direction!=DIRECTION_BUY) さもなくば { if(rt[0].open<ma[0] && rt[0].close>ma[0]) signal=ORDER_TYPE_BUY; // 買いの条件 if(inp_direction!=DIRECTION_SELL)です。 } //--- 追加のチェック if(signal!=WRONG_VALUE) if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))とする。 if(Bars(_Symbol,_Period)>100) { CTradeトレード trade.PositionOpen(_Symbol,signal,TradeSizeOptimized().Trade.PositionOpen(_Symbol))。 SymbolInfoDouble(_Symbol,signal==ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK,) 0,0); } //--- } //+------------------------------------------------------------------+ ///クローズポジションの条件をチェックする| //+------------------------------------------------------------------+ void CheckForClose(void) { MqlRates rt[2]です。 //--- 値段をコピーする if(CopyRates(_Symbol,_Period,0,2,rt)!=2) { Print("CopyRates of ",_Symbol," failed, no history"); を返します。 } //--新しいバーの最初のティックでのみ取引する if(rt[1].tick_volume>1)とする。 を返します。 //--- 移動平均の現在値を取得 double ma[1]; if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)。 { Print("CopyBuffer from iMA failed, no data"); を返します。 } //--- 先ほどPositionSelect()で選択したポジションの型を取得します。 bool signal=false。 long type=PositionGetInteger(POSITION_TYPE)。 if(type==(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0]) signal=trueとした。 if(type==(long)POSITION_TYPE_SELL && rt[0].open<ma[0] && rt[0].close>ma[0]) signal=trueとした。 //--- 追加のチェック もしもし if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))とする。 if(Bars(_Symbol,_Period)>100) { CTradeトレード trade.PositionClose(_Symbol,3)。 } //--- } Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5 www.mql5.com MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций Any questions from newcomers エラー、バグ、質問 初めての方からの基本的な質問 Tretyakov Rostyslav 2021.09.29 11:10 #16313 このセクションは次のようになります。 //--- проверка сигналов ENUM_ORDER_TYPE signal=WRONG_VALUE; if(rt[0].open>ma[0] && rt[0].close<ma[0]) { if(inp_direction!=DIRECTION_BUY) signal=ORDER_TYPE_SELL; } else { if(rt[0].open<ma[0] && rt[0].close>ma[0]) { if(inp_direction!=DIRECTION_SELL) signal=ORDER_TYPE_BUY; } } //--- дополнительные проверки Alexey Viktorov 2021.09.29 11:18 #16314 MakarFX #: この部分は、このようにします。 マカー、これ。 if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY) は、これに置き換えるのがよいでしょう。 if(inp_direction!=DIRECTION_BUY) Tretyakov Rostyslav 2021.09.29 11:34 #16315 Alexey Viktorov #:マカー、この一枚 は、これに置き換えるのがよいでしょう。 代用される) amsgif80 2021.09.29 11:47 #16316 MakarFX #: このセクションは次のようになります。 心からありがとうございました一気に効いてきた、効いてきた。そして、どうすればいいのか、すでに頭を悩ませています)) amsgif80 2021.09.29 13:31 #16317 同じ質問を、私自身の簡単なエディターで生成したExpert Advisorについて、もう一度してもいいですか?これでなんとか自分でできると思ったのですが、このBuy/Sellのコードをどこに入れればいいのかがわかりません。このBuy/Sellのコードをどこに貼り付ければいいのかわかりません。 Tretyakov Rostyslav 2021.09.29 13:40 #16318 amsgif80 #: 同じ質問を、私自身のシンプルなエディター生成のEAについて、もう一度してもいいですか?これでなんとか自分でできると思ったのですが、このBuy/Sellのコードをどこに入れればいいのかがわかりません。このBuy/Sellのコードをどこに貼り付ければいいのかがわかりません。 表示する Tretyakov Rostyslav 2021.09.29 13:44 #16319 amsgif80 #: フォーラムでコードを挿入する方法を紹介しました EVGENII SHELIPOV 2021.09.29 13:47 #16320 MakarFX #:何も変わっていないじゃないか。こうとうが中に入っています。 Makarさん、ありがとうございます。 1...162516261627162816291630163116321633163416351636163716381639...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
挿入しようとしたコードはこれです。
コードの先頭にこれを投げる:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // 買いのみ
DIRECTION_SELL = 1, // 唯一の販売
DIRECTION_ANY = 2, // 買い&販売
};
入力 ENUM_DIRECTION inp_direction = DIRECTION_ANY; // 許可された取引の方向
さらにコードで買うとどこに売って開く場所を見つけて ください。start() または OnTick() 関数の内部を見る
条件に買いがある場合追加:
if(inp_direction!=DIRECTION_SELL)
条件に売りがある場合追加:
if(inp_direction!=DIRECTION_BUY)です。
どこに入れたんですか?
このセクションは次のようになります。
この部分は、このようにします。
マカー、これ。
if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)
は、これに置き換えるのがよいでしょう。
if(inp_direction!=DIRECTION_BUY)
マカー、この一枚
は、これに置き換えるのがよいでしょう。
このセクションは次のようになります。
心からありがとうございました一気に効いてきた、効いてきた。そして、どうすればいいのか、すでに頭を悩ませています))
同じ質問を、私自身のシンプルなエディター生成のEAについて、もう一度してもいいですか?これでなんとか自分でできると思ったのですが、このBuy/Sellのコードをどこに入れればいいのかがわかりません。このBuy/Sellのコードをどこに貼り付ければいいのかがわかりません。
フォーラムでコードを挿入する方法を紹介しました
何も変わっていないじゃないか。
こうとう
が中に入っています。
Makarさん、ありがとうございます。