エラー、バグ、質問 - ページ 256

 

2次元の動的配列の 宣言方法を教えてください。これについては、ヘルプに動的次元が1つの例しか載っていません。

double matrix[][10][20];// 3 次元動的配列

ArrayResize(matrix,5);// 1 次元の大きさを設定 します.


と宣言しています。

double matrix[][];

が動作しない場合、コンパイラは次のように書きます:']'- 無効なインデックス値

 

Help, I can't understand what he doesn't like... He keeps writing 10016 (like astop loss is not set correctly) ありがとうございます。

#property version   "1.00"
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12937
input double BASELOT=0.5;
input double stoploss=0.0;
input double takeprofit=0.0;
//+------------------------------------------------------------------+
int OnInit()
  {
   int send;
   int signalMA=signalMA();
   if(signalMA==1)
     {
      send=1;
      Send(send);
        } else if(signalMA==2) {
      send=2;
      Send(send);
     }
   return(0);
  }
//+------------------------------------------------------------------+
int signalMA() 
  {
   int signalMA=0;
   double inMA6 = iMA(NULL,0,6,0,MODE_SMA,0);
   double inMA1 = iMA(NULL,0,1,0,MODE_SMA,0);
   if(inMA6>inMA1)
     {
      signalMA=1;
     }
   if(inMA6<inMA1)
     {
      signalMA=2;
     }
   return(signalMA);
  }
//+------------------------------------------------------------------+
void Send(int send)
  {
   MqlTick tick;
   MqlTradeRequest request;
   MqlTradeResult tradeResult;
   MqlTradeCheckResult checkResult;
   static bool br=false;
   if(!br) 
     {
      if(send==1) 
        {
         br=true;
         request.price=tick.bid;
         request.sl = stoploss;
         request.tp = takeprofit;
         request.type=ORDER_TYPE_SELL;
           } else if(send==2){
         br=true;
         request.price=tick.ask;
         request.sl = stoploss;
         request.tp = takeprofit;
         request.type=ORDER_TYPE_BUY;
        }
      if(br) 
        {
         request.action       = TRADE_ACTION_DEAL;
         request.symbol       = _Symbol;
         request.volume       = BASELOT;
         request.deviation    = 5;
         request.type_filling = ORDER_FILLING_AON;
         request.type_time    = ORDER_TIME_GTC;
         request.comment      = "";
         request.magic        = MAGIC_NUMBER;
         if(OrderCheck(request,checkResult)) 
           {
            OrderSend(request,tradeResult);
              } else {
            Print("Error: ",checkResult.retcode);
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
tmt0086:

ヘルプ、私は彼が好きではないものを理解することはできません...10016を書き続ける(ストップロスが正しく設定されていないような)ありがとうございました。

まず、この関数の書き方が間違っています。

int signalMA() 
  {
   int signalMA=0;
   double inMA6 = iMA(NULL,0,6,0,MODE_SMA,0);
   double inMA1 = iMA(NULL,0,1,0,MODE_SMA,0);
   if(inMA6>inMA1)
     {
      signalMA=1;
     }
   if(inMA6<inMA1)
     {
      signalMA=2;
     }
   return(signalMA);
  }

このようになるはずです。 停止エラーについてはわかりません。


//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12937
input double BASELOT=0.5;
input double stoploss=0.0;
input double takeprofit=0.0;

int handleMA1=INVALID_HANDLE;
int handleMA2=INVALID_HANDLE;

double inMA6[];
double inMA1[];

MqlTick tick;
MqlTradeRequest request;
MqlTradeResult tradeResult;
MqlTradeCheckResult checkResult;
//+------------------------------------------------------------------+
int OnInit()
  {
   handleMA1=iMA(NULL,0,6,0,MODE_SMA,0);
   handleMA2= iMA(NULL,0,1,0,MODE_SMA,0);

   int send;
   int signalMA=signalMA();
   if(signalMA==1)
     {
      send=1;
      Send(send);
        } else if(signalMA==2) {
      send=2;
      Send(send);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int signalMA()
  {
   int sig=0;
   if(handleMA1==INVALID_HANDLE)
     {
      handleMA1=iMA(NULL,0,6,0,MODE_SMA,0);
      return(0);
     }
   if(handleMA2==INVALID_HANDLE)
     {
      handleMA2=iMA(NULL,0,1,0,MODE_SMA,0);
      return(0);
     }
   if(CopyBuffer(handleMA1,0,0,1,inMA6)<1) return(0);
   if(CopyBuffer(handleMA2,0,0,1,inMA1)<1) return(0);
   if(!ArraySetAsSeries(inMA6,true)) return(0);
   if(!ArraySetAsSeries(inMA1,true)) return(0);

   if(inMA6[0]>inMA1[0]) sig=1;
   else if(inMA6[0]<inMA1[0]) sig=2;
   else sig=0;
   return(sig);
  }
//+------------------------------------------------------------------+
void Send(int send)
  {
   static bool br=false;
   if(!br)
     {
      if(send==1)
        {
         br=true;
         request.price=tick.bid;
         request.sl = stoploss;
         request.tp = takeprofit;
         request.type=ORDER_TYPE_SELL;
           } else if(send==2){
         br=true;
         request.price=tick.ask;
         request.sl = stoploss;
         request.tp = takeprofit;
         request.type=ORDER_TYPE_BUY;
        }
      if(br)
        {
         request.action       = TRADE_ACTION_DEAL;
         request.symbol       = _Symbol;
         request.volume       = BASELOT;
         request.deviation    = 5;
         request.type_filling = ORDER_FILLING_AON;
         request.type_time    = ORDER_TIME_GTC;
         request.comment      = "";
         request.magic        = MAGIC_NUMBER;
         if(OrderCheck(request,checkResult))
           {
            OrderSend(request,tradeResult);
              } else {
            Print("Error: ",checkResult.retcode);
           }
        }
     }
  }
//+------------------------------------------------------------------+
 
-Alexey-:

2次元の動的配列の 宣言方法を教えてください。これについては、ヘルプに動的次元が1つの例しか載っていません。

double matrix[][10][20];// 3 次元動的配列

ArrayResize(matrix,5);// 1 次元の大きさを設定 します.


と宣言しています。

double matrix[][];

が動作しない場合、コンパイラは']'と記述します。- 無効なインデックス値

MQL5では、ダイナミックディメンションは1つしかありません。

複数の次元を使用するには、構造体を使用します。

struct SDynamic
  {
   double            data[];
  };

...

SDynamic Arr2D[];

...

bool Arr2DResize(SDynamic &a2d[],int d1,int d2)
  {
   if(ArrayResize(a2d,d1)!=d1) return(false);
   for(int i=0;i<d1;i++)
      if(ArrayResize(a2d[i].data,d2)!=d2) return(false);
   return(true);
  }

...

Arr2DResize(Arr2D,10,10);

...

Print(Arr2D[0].data[3]);
 
mql5:

MQL5では、ダイナミックディメンションは1つしかありません。

を複数使用する場合は、構造体

mql5様 お世話になりました、解説と実例です。
 

隣の掲示板に行けばよかったのですが、写真に問題があって(アップロードがうまくいかなかった)・・・。:(


開発者の皆様へ。

MT4 229レポートより。これはバグなのか何なのか?


 
Interesting:

隣の掲示板に行けばよかったのですが、コルティナに問題があって(アップロードがうまくいかなかった)・・・。:(



私の理解するところでは、このような絵が描かれています。

ブラウザ版が必要。

 
alexvd:

私の理解するところでは、絵が描かれています。

ブラウザ版が欲しい。

Pngと Gif 形式で画像を置いてみました(radikal.ruのサービスを使ってJpgで 置くことも試みました)。

ブラウザ Firefox 3.6.13。

追記

このスレッド -MetaTrader 4 Client Terminal build 228 の新バージョンに 入れようとしたのですが。

不思議なことにPngは 存在するようです。

Новая версия MetaTrader 4 Client Terminal build 228 - MQL4 форум
  • www.mql5.com
Новая версия MetaTrader 4 Client Terminal build 228 - MQL4 форум
 
Interesting:

デベロッパー

MT4 229レポートより。これはバグなのか何なのか?



そうではなさそうだ。

その結果、負けトレードは2回(45回中)しかなく、しかもその2回とも買いだったことが判明しました。

もしかしたら、見る場所を間違えているのでは?

 
Interesting:

Pngと Gif 形式で画像を置いてみました(radikal.ruを使ってJpgで 置くことも試みました)。

Firefox 3.6.13のブラウザです。

追記

このスレッドに挿入しようとした -新バージョン MetaTrader 4 クライアントターミナル ビルド 228

不思議なことにPngは 存在するようです。

キャッシュのクリーニングをお試しください。別のオプション、別のブラウザで試したところ、追加に成功しました。

アタッチメントではなく、コメントに直接画像を貼り付けているのですね。