初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 63

 

Gumko:

ガム子 :で、このタスクが最初に出てくるまで、どのくらいかかるんですか......?

もう2日も立っているんですよ。

8~10日待って、あきらめて電源を切りました。
 
テスターソフトのバックグラウンドでのCPU負荷はどの程度なのか気になるところです。
 

皆さん、こんにちは。

改造と問題点

外部機能。

bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit){。
//---- バインディング構造と貿易実績
MqlTradeRequest リクエスト。
MqlTradeResultの結果。
//---- 取引検索 MqlTradeRequest の構造体初期化(ポジション変更用
request.action =TRADE_ACTION_SLTP;
request.symbol = symbol;
request.sl = StopLoss;
request.tp = Takeprofit;
文字列 word = "";
StringConcatenate(word,
"<< ========== Modifyposition(): 位置の修正",
symbol," ============ >>");
Print(word)です。
//---- ポジションを変更し、トレードサーチの結果を確認する。
if(!OrderSend(request,result) || result.deal==0)
{
Print("Modify error =", GetLastError();
return(false)です。
}
return(true)です。
}

でも、こうはいきません。

どうすればいいのか?

ありがとうございました :)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
mario065: しかし、そのように動作しません。 どうすればよいのでしょうか? ありがとうございました。)

この方法で試してみてください。

MqlTradeRequest request={0};
MqlTradeResult  result ={0};
 
Yedelkin:

この方法で試してみてください。

イェデルキン

ありがとうございます、うまくいかなかったんですね。

関数呼び出しの開始を正しくカウントしているか確認しました。

その方法はこうだ。

double Bid = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
double Ask = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits)。
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
double SL = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
if(オープン > 0){.
start_buy = Ask - Open; Print("start_buy=",start_buy);
start_sel = Open - Bid;Print("start_sel=",start_sel);
}

ログでびっくり。

MR 0 Core 1 10:21:49 2012.10.01 10:12:42 取引 #2 売り 0.10 EURUSD at 1.28146 完了 (注文 #2 に基づいています)
GH 0 Core 1 10:21:49 2012.10.01 01:12:42 取引実行 [#2 sell 0.10 EURUSD at 1.28146].
NI 0 Core 1 10:21:49 2012.10.01 01:12:42 order performed sell 0.10 at 1.28146 [#2 sell 0.10 EURUSD at 1.28146 (0.00000)
OF 0 コア 1 10:21:49 2012.10.01 01:12:43 start_buy=0.00012999999999635
DR 0 コア 1 10:21:49 2012.10.01 01:12:43start_sel=5.000000000010552e-005
LE 0 コア 1 10:21:49 2012.10.01 01:12:43 start_buy=0.00010999999998325
EN 0 コア 1 10:21:49 2012.10.01 01:12:43start_sel=7.00000000000145e-005

もちろん、私もセラだけ気になっていたのですが、この数字はどこから出てきたのでしょうか?

表示されているように、正しく関数を書いたつもりです。

SLおよびTPの変更

ストップロスやテイクプロフィットレベルを変更するための取引注文。4つのフィールドが必要です。

  • アクション
  • シンボル
  • SL
  • TP
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
mario065: ありがとうございます、うまくいきませんでした。

では、具体的に何が「失敗」したのでしょうか?

mario065 : 関数呼び出しの開始が正しくカウントされるかどうか確認したところ、以下のようになりました。

コードを 正しく挿入 する(Ctrl+Alt+M)。

  double Bid  = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_BID),_Digits);
  double Ask  = NormalizeDouble(SymbolInfoDouble(Currency,SYMBOL_ASK),_Digits);
  double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),_Digits);
  double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),_Digits);
  if(Open > 0)
    {
     start_buy = Ask - Open;Print("start_buy=",start_buy);
     start_sel = Open - Bid;Print("start_sel=",start_sel);
    }

ここでは、正規化を別の順序で行う必要がある。

1.SymbolInfoDouble(Currency,SYMBOL_BID) タイプの値がサーバーから送られてくるので、すでに正規化されたものとみなされる。また、2回目の正規化を行う必要はありません。つまり、書くだけでいいんです。

double Bid  = SymbolInfoDouble(Currency,SYMBOL_BID);

2.ただし、何らかの算術演算を した後は正規化がなくなるので、正規化された数値を得る必要がある場合は、次のように書きます。

start_buy = NormalizeDouble(Ask - Open,_Digits);

あとはまだ考え中です。

 
mario065: ログでびっくり。

DR 0 Core 1 10:21:49 2012.10.01 01:12:43start_sel=5.000000000010552e-005
EN 0 Core 1 10:21:49 2012.10.01 01:12:43start_sel=7.0000000145e-005

もちろん、そのような数字がどこから出てきたのか、ということにしか興味はないのですが。

7.00000000000145e-005は、実数の値の書き方のひとつに過ぎない。科学的」ということですね。詳しくはこちらをご覧ください。"MQL5 Reference Guide /Language Basics / Data Types / Real Types (double, float)" を参照してください。
 
Yedelkin:
7.00000000000145e-005は、実数の値の書き方のひとつに過ぎない。科学的」ということですね。詳しくはこちらをご覧ください。"MQL5 Reference Guide /Language Basics / Data Types / Real Types (double, float)" を参照してください。

イェデルキン

問題に取り組んでいただき、ありがとうございます。

ポジションを開くための関数は、Nikolay Kositsin氏によって書かれたものです。

ファイル:
MTB_E.mq5  9 kb
 
No.2ウィンドウに属するMAをEAで指定する方法と場所を教えてください。
例えば、MFIにMAを追加し、このMAをEAに登録したいのですが。どこでどうすればいいのかわからない。

ご返信ありがとうございます)
 
mario065: 以下はそのコードです。ポジション開設のための機能は、ニコライ・コシチンが書きました。ニコライ・コシチン

1.私が言いたいのは、他人のコードを使うときは細心の注意を払ってほしいということです。他人のコードということは、他人のミスもあるということですから。

2.ここ(https://www.mql5.com/ru/forum/6343/page64#comment_357008) では、変数を使う前に正しくゼロにすることを心がけるよう提案しました。しかし、あなたのコードはまだこの提案を実装していません。さらに、あなたのコードには次のようなタイプのコンストラクトが含まれています。

//+------------------------------------------------------------------+
//| Modify position.                                                 |
//+------------------------------------------------------------------+
bool ModifyPosition(const string symbol,double StopLoss,double Takeprofit)
  {
//---- обявяване на структурата и резултата на търговското искане
   MqlTradeRequest request;
   MqlTradeResult result;
//---- структурна инициализация на  търговското искане MqlTradeRequest за модифициране на  позиция
   request.action       = ...
   request.symbol       = ...
   request.sl           = ...
   request.tp           = ...
   ...
//---- модифицираме позицията и  проверяваме резултата от търговското искане
   if(!OrderSend(request,result) || result.deal==0)
     {
      ...
     }
   ZeroMemory(request);
   ZeroMemory(result);
   return(true);
  }

この構成では、リクエスト変数と結果変数が使用される前ではなく、使用された後に ゼロになることはお分かりでしょう。また、これらの局所変数がゼロになると、関数は動作を停止する。つまり、ゼロにすること自体に意味がないのである。つまり、このような構成は、MqlTradeRequestと MqlTradeResultの 変数がゼロにならない ようにするための良い例です。というわけで、熱心な方は、ぜひ、正しく変数をクリアしてみてください。うまくいかないときは、何が「うまくいかない」のか、具体的に教えてください。

3.標準ライブラリには、「MQL5 Reference / Standard Library / Trade Classes / CTrade」というトレードクラスがあります。実際にどのように適用するかを考えてみてください。語学に没頭する最初の段階では、このクラスで十分かもしれません。例えば、このクラスは次のメソッドを持っています:「MQL5 Reference / Standard Library / Trade Classes / 2CTrade/ PositionModify」。以下のように実装されています。

//+------------------------------------------------------------------+
//| Modify specified opened position                                 |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.magic =m_magic;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

その中の'ClearStructures();の行で、変数m_requestを使用する前に クリアしています。

理由: