MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1227

 

皆さんこんにちは、スレッドの内容をちょっとだけ確認しますと、コードに疑問があります。

int stoplevel;
int  MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax(SymbolInfoInteger(_Symbol,MODE_FREEZELEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax(MinimumUseStopLevel, stoplevel);

コンパイル時に「型変換によりデータが失われる可能性が あります ...」という警告が発生します。何が必要なのか?そんなに致命的なことではないのですが、知りたいですね。


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix:

皆さんこんにちは、スレッドの内容をちょっとだけ確認しますと、コードに疑問があります。

コンパイル時に「型変換によりデータが失われる可能性が あります ...」という警告が発生します。何が必要なのか?それほど重要ではないが、知りたい。


サイトエンジン自身が回答へのリンクを挿入し、明示的な型変換を行った例もある............。

//--- ускорение свободного падения
   double g=9.8;
   double round_g=(int)g;
   double math_round_g=MathRound(g);
   Print("round_g = ",round_g);
   Print("math_round_g =",math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix:

皆さんこんにちは、スレッドの内容をちょっとだけ確認しますと、コードに疑問があります。

コンパイル時に「型変換によりデータが失われる可能性が あります ...」という警告が発生します。何が必要なのか?そんなに決定的なことではないのですが、知りたいですね。


警告だけでなく、エラーも出ていますね。本当にこの特定のコードでコンパイルしているのでしょうか?

そうあるべきなのです。

   int stoplevel=0;
   int MinimumUseStopLevel=0;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int(fmax(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int(fmax((int)MinimumUseStopLevel,(int)stoplevel));

ただ、コードを掘り下げることなく、エラーや警告が出ないようにするためです。

考えてみれば、温と湿が混在しているわけですから

 
Artyom Trishkin:

警告だけでなく、エラーも発生しています。本当にこのコードでコンパイルしているのでしょうか?

それが、あるべき姿なのです。

ただ、コードを掘り下げることなく、エラーや警告が出ないようにするためです。

考えてみれば、ごちゃ混ぜにしているわけですからね。

ありがとうございます。

叱らないでください、私はただ勉強しているだけなのです。それが一番手っ取り早いような気がします。

すべての変数がintで、戻り値がsymbolinfointegerであるなら、なぜ型変換が 必要なのか理解できないのですが?

 
Sayberix:

ありがとうございます。

あまり叱らないでください、私はただ勉強しているだけなのです。これが一番手っ取り早いような気がします。

すべての変数がintで、戻り値がsymbolinfointegerであるなら、なぜ型変換が 必要なのか理解できないのですが?

SymbolInfoInteger() はlong を 返す。
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

親愛なるプログラマーの皆さん、こんにちは。

手動で開いたポジションや他のEAが開いたポジションに関係なく、自分のEAがポジションを開く ようにするにはどうすればよいですか?マジックでやってみたが、うまくいかなかった。マジックでやってみたが、うまくいかなかった。

datetime some_time=TimeCurrent();
extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                      
double SL=50;                                   
double TP=50;                       
double Lots=3;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[0]>High[1])&&(OrderMagicNumber() != MagicNumber)) 
{
send=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(OrderMagicNumber() != MagicNumber))
{
send=OrderSend(Symbol3,OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Alexey Belyakov:

親愛なるプログラマーの皆さん、こんにちは。

手動で開いたポジションや他のEAが開いたポジションに関係なく、自分のEAがポジションを開く ようにするにはどうすればよいですか?マジックでやってみたが、うまくいかなかった。以下はそのコードです。


フィールドが不足しており、チェックする順番が選択されていません。

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != _Symbol)continue;
      if(OrderMagicNumber() != magic)continue;     
n++;
}

if(n == 0){
OrderSend(_Symbol, _type, lot, price, 0, sl, tp, comment, magic, 0, clrNONE);
}
 
口座からお金を引き出す方法

 
助けて...入れて、出せない
 
Georgiy Liashchenko:


フィールドが欠落しており、番号を確認するための順序が強調表示されていません

しました。してないんです。パックで開きます。マジックが無視してる。


datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) 
{
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != "EURUSD")continue;
      if(OrderMagicNumber() != MagicNumber)continue;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}