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

 
Alexey Viktorov:

その主張を読みました。しかし、それは議論ではなく、説明を理解しようとせず、端末の非を証明しようとしたに過ぎないのです。あなたの言葉には、何の裏付けもありませんでした。スクリーンショットを作って、自分の考えを明確に説明するのが面倒なんでしょ う。

スクリーンショットってなんだ!?コードを提供しましたが、MT4で動作しており、MT5ではクラッシュします。エラーの種類は、コメントアウトされたコードにも書かれています。
 
comp:
スクリーンショットって何だ!?提供されたコードでは、MT4で動作し、MT5ではエラーでクラッシュします。エラーの種類は、コメントアウトされたコードにも書かれています。

それでいいんです。それは、あなたの視点です。みんな自分の主張を理解するために何かしないといけないと思ってるんだろうけど、反論しない方が楽だし、要求が多すぎてBANされた方が本当に楽だと思ってないんだろうね。

私は幸いにも 禁止する権利を持っていないので、この対話を止めるだけです。

 
注文が開始されない理由を教えてください
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
注文が開始されない理由を教えてください。
 
edutak:
注文が開始されない理由を教えてください。

少なくとも4つのエラーがあります

'RSI_uroven1' - 未宣言の識別子 32.mq4 13 12

'RSI_uroven2' - 未宣言の識別子 32.mq4 14 12

'RSI' - 未宣言識別子 32.mq4 16 24

'pos' - 変数がすでに定義されている 32.mq4 19 12

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
注文が開けない理由を教えてください。

まず最初に、注文数をカウントする正常な関数をお教えしましたが、あなたはまだ間違った関数を使い続けています。

次に if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) の条件が相互に矛盾している場合です。

 
Vitalii Ananev:

まず最初に、注文数をカウントする正常な関数をお教えしましたが、あなたはまだ間違った関数を使い続けています。

次に if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) の条件が相互に矛盾している場合です。

普通の機能を使います。これはテスター用のとりあえずの下書きです。ブロック単位でコピーするだけなので、その方が早いです。

もし、あるレベルのRSIを超えたら注文が開き、他のレベルを超えたら - それは閉じられ、すぐに別の注文が開かれるなら、矛盾はないでしょう。

それとも、あるのでしょうか?

 
Vladislav Andruschenko:

少なくとも4つのエラーがあります

'RSI_uroven1' - 未宣言の識別子 32.mq4 13 12

'RSI_uroven2' - 未宣言の識別子 32.mq4 14 12

'RSI' - 未宣言識別子 32.mq4 16 24

'pos' - 変数がすでに定義されている 32.mq4 19 12


ありがとうございます、うまくいきました。
 
edutak:

普通の機能を使います、これはテスター用のとりあえずのラフ案です。ブロック単位でコピーするだけです、その方が早いです。

RSIがいずれかのレベルを超えたら注文を開き、他のレベルを超えたら閉じてすぐに別の注文を開くのであれば、矛盾は生じません。

それとも、あるのでしょうか?

ただ、考えてみてください。uroven1 = 80; rsi = 30とする。rsi > 80またはrsi < 80という条件は、(30 > 80 [false] または 30 < 80 [true] )が自然界に存在しないことを意味する。OR演算子を使っているので条件は真になりますが、本質的には意味がありません。

Suppose uroven2 = 20; rsi = 30 (30 > 20 [true] or 30< 20[false] ) という式の後半部分がそうである。

 

Suppose uroven2 = 20; rsi = 30 (30 > 20 [true] or 30< 20[false] ) という式の後半部分がそうである。

またはと書いたのは、任意のレベルクロスで、注文が開かれるという意味です。2つ目の条件30<20[false]が発生すると、その時点で前回の注文は終了し、trueになる。

私の理解が正しければ

 
もし、あなたが正しいことがわかったら、2つ目のRSIを追加するつもりです。
理由: