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

 
Leanid Aladzyeu:

くし

タイプ変換によるデータ損失の可能性 .mq4 1697 29

SLでタイプDoble。

最近のコンパイラは厳しくて、MarketInfoはdouble型を返す、みたいな感じになっているはずです。

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

最近のコンパイラは厳しくて、MarketInfoはdouble型を返す、みたいな感じになっているはずです。

sumbol "変数は正しいです、私はモディファイヤーラッパーで変数として持っています。

ありがとうございます。(int)を入れたらすべてうまく いきました。

以前はどうやったのか分かりません。EAを書いた 経験は21日です))

いつからEAを書くようになったのか、ちゃんとしたやり方がわかりません(笑)。

 

Leanid Aladzyeu:

以前はどうやってEAを書いて いたのかわかりません(21日間書き続けて います))。そして、私のEAはしつこく無料EAの上位に食い込んできています))

バージョン600までの古いMQL4はひどかったので、とてもラッキーでした。)私のEAへのリンクを送ってください、あなたのメールボックスにあるかもしれません
 
Alexey Volchanskiy:
600版までの古いMQL4はひどかったので、とてもラッキーでしたね ))MQL4 Expert Advisorのリンクを送ってください。
自分のニックネームと製品に
 

なぜか最後の行でエラーになります。

'}'- すべてのコントロールパスが値を返すわけではない Expert4.mq4

すべての非void関数はreturn演算子で終了する必要があります。

ビデオチュートリアルのこのコードを見ているだけですが、古いビルド用かもしれません。



#include#include<stderror.mqh>とする。

//+------------------------------------------------------------------+
//|Expert4です。mq4|(エムキューブ
//|ミハイル|
//||
//+------------------------------------------------------------------+
#property copyright"Mikhail"
#プロパティリンク ""
#property version "1.00"
#プロパティの厳密さ

int signal = 1;

int start()
{
if (signal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue)を実行。
}
return(0)です。
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss),
double takeprofit,stringコメント=NULL,intマジック=0,datetime有効期限=0,カラーarrow_color=CLR_NONE)
{
int err = GetLastError()。
err = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10;
int cnt = 0;
if (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError()。

スイッチ
{
case ERR_NO_ERROR:
exit_loop = trueとする。
が壊れる。

{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++です。
が壊れる。

case ERR_PRICE_CHANGED:


RefreshRates()。
を続ける。

のデフォルトになります。
exit_loop +true。
が壊れる。

}
if (cnt> Retry)
exit_loop = trueとする。


if (!exit_loop)
{
Sleep(1000)です。
RefreshRates()。

}
さもなくば
{
if(err != ERR_NO_ERROR)
{
Print ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket)です。
}

Print("Error: order open failed after" + cnt + "atempts");
return(-1)です。


}//while
}//if
}//exit
 
Mikhail Nikolaev:

ここで...

}


}


return(ticket)です。

}

 
Mikhail Nikolaev:

リーニッド・アラジーユ

フォーラムでコードを正しく挿入 する

 
Mikhail Nikolaev:

なぜか最後の行でエラーになります。

'}'- すべてのコントロールパスが値を返すわけではない Expert4.mq4

すべての非void関数はreturn演算子で終了する必要があります。

このコードはビデオチュートリアルで見ただけですが、古いビルド用かもしれません。



#include#include<stderror.mqh>とする。

//+------------------------------------------------------------------+
//|Expert4です。mq4|(エムキューブ
//|ミハイル|
//||
//+------------------------------------------------------------------+
#property copyright"Mikhail"
#プロパティリンク ""
#property version "1.00"
#プロパティの厳密さ

int signal = 1;

int start()
{
if (signal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue)を実行。
}
return(0)です。
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss),
double takeprofit,stringコメント=NULL,intマジック=0,datetime有効期限=0,カラーarrow_color=CLR_NONE)
{
int err = GetLastError()。
err = 0;
bool exit_loop = false;
int ticket = -1;

int Retry = 10;
int cnt = 0;
if (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
err = GetLastError()。

スイッチ
{
case ERR_NO_ERROR:
exit_loop = trueとする。
が壊れる。

{ case ERR_SERVER_BUSY:
case ERR_NO_CONNECTION:
case ERR_INVALID_PRICE:
case ERR_OFF_QUOTES:
case ERR_BROKER_BUSY:
case ERR_TRADE_CONTEXT_BUSY:
cnt++です。
が壊れる。

case ERR_PRICE_CHANGED:


RefreshRates()。
を続ける。

のデフォルトになります。
exit_loop +true。
が壊れる。

}
if (cnt> Retry)
exit_loop = trueとする。


if (!exit_loop)
{
Sleep(1000)です。
RefreshRates()。

}
さもなくば
{
if(err != ERR_NO_ERROR)
{
Print ("ERROR: " + err);

}

}

if(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
return(ticket)です。
}

Print("Error: order open failed after" + cnt + "atempts");
return(-1)です。


}//while
}//if
}//exit

男、コードのフォーマットってそんなに難しいの?原則的に見ないよ~目が痛くなるし。
 
またラグってしまった、収まらない
 
Leanid Aladzyeu:
またラグってしまった、収拾がつかない。

大丈夫です、どのブラウザをお使いですか?別のものに変えてみてください。FFoxを持っています。一番最後のコードのコメントで答えを出しました。

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit
理由: