初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 31

 
あるいは、この条件にこの削除関数を書き込む方法をアドバイスしてください。
 
spoiltboy:
あるいは、この条件でこの削除関数をどのように書けばいいのか教えてください。

削除する注文のチケットを定義する必要があります。

チケットがNULLまたは未定義の場合、削除しないでください。

 
spoiltboy:

これは、異なる注文の場合です。条件によって一方を削除し、条件なしで他方を削除する機能。

問題は、私の場合、削除機能は条件なしで正常に動作しますが、条件に入れてしまうと、条件発生時にエラーが発生するのはなぜか、ということです。

コンディションの修正が必要、コンディションが悪いとできない、ログがハードディスクを占領してしまう
 
Renat Akhtyamov:

削除するticketDとticketUPを先に定義しておく必要があります。

チケットがnullまたはundefinedの場合、削除は行われません

つまり、1枚はticketD、もう1枚ticketUPと 定義されて いるのです。

それとも、私が何か勘違いしているのでしょうか?

 
spoiltboy:

つまり、1枚はticketD、もう1枚ticketUPと 定義されて いるのです。

それとも、私が何か勘違いしているのでしょうか?

チケットUPが既に削除 されている場合、どのように定義すればよいのでしょ うか?

削除してしまった、ticketUPを必要な状態に更新する、その際、ticketUPを削除する条件が機能しない、この条件もコードに追加する必要があります。

 
Renat Akhtyamov:

チケットUPが既に削除 されている場合、どのように定義すればよいのでしょ うか?

削除してしまった、ticketUPを必要な状態に更新する、その際、チケットを削除する条件が機能しない、この条件もコードに追加する必要があります。

つまり、チケットD、別のチケットUPの 注文が先に(不在条件に従って)作成され、その後、それらはすでに削除されているのです。

if(BuyLimitCount()==0&& BuyCount()==0){
slB=NormalizeDouble(minpr1-pointsl*Point,5);
tpB=NormalizeDouble(minpr1+pointtp*Point,5);
int ticketUP=OrderSend(Symbol(). B),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red);
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}

if(SellLimitCount()==0&& SellCount() ==0){
slS=NormalizeDouble(maxpr1+pointsl*Point,5);
tpS=NormalizeDouble(maxpr1-pointtp*Point,5);
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue);
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}

if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}.

OrderDelete(ticketUP)。

もし私が混乱していたら、何?

 
spoiltboy:

そのため、チケットD、別のチケットUPを 持つ注文がまず(不在条件に従って)作成され、その後削除される。

if(BuyLimitCount()==0&& BuyCount()==0){。
slB=NormalizeDouble(minpr1-pointsl*Point,5)とする。
tpB=NormalizeDouble(minpr1+pointsl*Point,5)とする。
int ticketUP=OrderSend(Symbol(),OP_BUYLIMIT, lotB, minpr1,3, slB, tpB,"", MagicB,0, Red) です。
if(ticketUP==-1)Print("ERROR OP_BUY"); elsePrint("OP_BUY OK");}.

if(SellLimitCount()==0&& SellCount() ==0){。
slS=NormalizeDouble(maxpr1+pointsl*Point,5) となります。
tpS=NormalizeDouble(maxpr1+pointsl*Point,5)。
int ticketD=OrderSend(Symbol(),OP_SELLLIMIT, lotS, maxpr1,3, slS, tpS,"", MagicS,0, Blue) です。
if(ticketD==-1)Print("ERROR OP_SELL"); elsePrint("OP_SELL OK");}.

if(x!=maxpr1){x=maxpr1;OrderDelete(ticketD);}.

OrderDelete(ticketUP)。

何を混乱させたらいいのか?

ここでも条件なしの命令になっていますね。

OrderDelete(ticketUP)。

なぜ、コードを変更しなかったのですか?

せめて「考える」時間をとって、整理する+自分が書いたもの、アドバイスされたものを読んでみる。

ところで、ここにはフリーランスが いるのですが、もしや...。

 
Renat Akhtyamov:

つまり、またしても条件なしの命令です。

OrderDelete(ticketUP)。

なぜ、コードを変更しなかったのですか?

少なくとも「考える」時間をとって、把握する+今まで書かれたこと、アドバイスされたことを読み込む。

ちなみに、うまくいかなければここでフリーランスも あり......。

条件なし-だと除去が発生するからで、条件あり-だとダメなんです。だから、できないことを示すために書いた。このように書くとよいでしょう。

OrderDelete(ticketD)です。

OrderDelete(ticketUP)。

そして、1ティックごとに(不在条件に従って)すでに作成された注文を削除する。と条件を付けて書けば

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.

そして、その条件が発生したときに、削除エラーを書き込むのです。

この条件で指定された注文を削除するには、どのように書けばよいのでしょうか。

 
spoiltboy:

条件なしだから......削除はそうなるけど、条件ありだとそうならないから。できないことを指摘するために、このように書きました。このように書くと

OrderDelete(ticketD)です。

OrderDelete(ticketUP)。

そして、1ティックごとに(不在条件に従って)すでに作成された注文を削除する。と条件を付けて書けば

if (x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}.

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}.

そして、その条件が発生したときに、削除エラーを書き込むのです。

指定した注文を削除する際の条件は、どのように書けばよいのでしょうか?


注文を削除するための条件を削除することはできません

ticketUPとticketDは、チケットを開くときに、グローバル変数 に書き込む必要があります

GlobalVariableSet("ticketUP",ticketUP)。

GlobalVariableSet("ticketD",ticketD)。

をクリックし、保留中のチケットを削除する前にそこから読み取ります。

ticketUP=GlobalVariableGet("ticketUP")です。

ticketD=GlobalVariableGet("ticketD")です。

ちなみに、そこ(グローバル)を見てみると、何があるか、どんなチケットが書かれているか

この後、すべてがうまくいくと思います。

 
こんにちは!誰が問題を解決するために助けることができる、私は動的な配列の ためのバイパーを書いている、以下は、クラスのコードです。
class CArray
{  
private:
   template <typename T>
   T _array[];
   int _index;
   int _err;
   int _err_sys;
public:
   CArray(){_index = -1; _err = 0; _err_sys = 0;}
   ~CArray(){}
  // template <typename T>
   T operator[](int i){
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   T at(int i){  
      if((_index == -1) || (i < 0) || (i > _index)) {_err_sys = -1;}
      return (_array[i]);
   }
   void push_back(T value){
      _array[++_index] = value;
   }
};

の部分は、プログラムコードの一部です。

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.1"
#property strict

#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
CArray *array;


int OnInit()
  {
  int b = 1;
   array = new CArray();
   array.push_back(b);
   int a = array.at(0);
  
//---
   return(INIT_SUCCEEDED);
  }
...

Expert Advisor を実際のデータで実行しようとすると、次のエラーが発生します: internal error #-1005

何がいけなかったのか?ありがとうございました。