[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 511

 
hoz:

他に何があるんだ?同じことを100回繰り返し計算する必要があるのでしょうか?

教科書のように、信号を専門家の一部にすれば、幸せになれますよ

さっきのスレッドにあるリンクは全部あげたんだけどな...。


 
hoz:

それ以外にはないでしょう?同じことを100回繰り返し計算する必要があるのでしょうか?
アイデアはRIGHT、実装はCROSS!:)))
 

そうですね......具体的な例がないんです。

https://docs.mql4.com/ru/basis/variables/formal

私のように関数のパラメータがある一番上、つまりデータ型の 後に&が書かれています。

 
hoz:

そうですね......具体的な例がないんです。

https://docs.mql4.com/ru/basis/variables/formal

私のように関数のパラメータがある一番上、つまりデータ型の後に&が書かれています。

もしかしたら、その方法でコンパイルできるかもしれません。

//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
bool GetPriceToInput (int signal)
{
  firstBarClosed = iClose(Symbol(),1440,2);
  secondBarClosed = iClose(Symbol(),1440,1);

    double deltaForSell = (firstBarClosed - secondBarClosed)/2;
    double priceForSell = secondBarClosed - deltaForSell;


    double deltaForBuy = (secondBarClosed - firstBarClosed)/2;
    double priceForBuy = secondBarClosed + deltaForBuy;  
    return (Trade (signal, priceForBuy, priceForSell));
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
  int signal = GetSignal();
    
    if (signal != SIGNAL_NO)
      if(!GetPriceToInput (signal))
      return(0);

  return(0);
}

コード構成は "左利き "っぽいけど......。

 
TarasBY:

もしかしたら、その方法でコンパイルできるかもしれません。

コード構成は "左巻き "ですが...。


まあ・・・書いたのは私なんですけどね。最初のスクープを歌ってください。:)
 

専門家を少し書き直しました。これが出てきたのです。

//+------------------------------------------------------------------+
//|                                                       2 Days.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string    A1 = "Объем сделки. Если i_lots = 0, то считается в процентах";
extern double    i_lots = 0.1;
extern string    A2 = "Управление рисками";
extern double    i_sl = 15,
                 i_tp = 10;
extern int  slippage,
            price_b,
            price_a;

extern string    Z1 = "=== Прочие настройки ===";
extern string    i_openOrderSound = "ok.wav";
extern int       i_magicNumber = 400021;

double firstBarClosed,
       secondBarClosed;
 
// Идентификаторы типов сигналов
#define SIGNAL_BUY              1                     // Сигнал на покупку
#define SIGNAL_SELL            -1                     // Сигнал на продажу
#define SIGNAL_NO               0                     // Нет сигнала

#include <stderror.mqh>

//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации эксперта                                                     |
//+-------------------------------------------------------------------------------------+
int init()
{
   
   return(0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации эксперта                                                     |
//+-------------------------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal, double& priceForBuy, double& priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble(priceForBuy,Digits);
  priceForSell = NormalizeDouble(priceForSell,Digits);
  
  if (signal == SIGNAL_BUY)
     if (!OrderSend(Symbol(),OP_BUYLIMIT, i_lots,priceForBuy,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  if (signal == SIGNAL_SELL)
     if (!OrderSend(Symbol(),OP_SELLLIMIT,i_lots,priceForSell,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  return(true);
}
//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
double GetPriceToInput(int signal)
{
  firstBarClosed = iClose(Symbol(),1440,2);
  secondBarClosed = iClose(Symbol(),1440,1);
    
  double deltaForSell = (firstBarClosed - secondBarClosed)/2;
  double priceForSell = secondBarClosed - deltaForSell;
    
//  return(priceForSell);

  
  double deltaForBuy = (secondBarClosed - firstBarClosed)/2;
  double priceForBuy = secondBarClosed + deltaForBuy;  
  return(Trade(signal, priceForBuy, priceForSell));
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
  if(firstBarClosed > secondBarClosed)
  return(SIGNAL_BUY);

  if(firstBarClosed < secondBarClosed)
  return(SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
  int signal = GetSignal();
    
    if (signal != SIGNAL_NO)
      if(!Trade(signal, priceForBuy, priceForSell))
      return(0);

  return(0);
}

 

ちなみに、エラーは

'priceForBuy' - variable not defined    E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 25)
'priceForSell' - variable not defined   E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (103, 38)

は、まさに開始 関数で発生します。これらの変数は定義されておらず、他のどこかでもありません。では、スタート 時に何かを追加する必要があるのでしょうか?

 
hoz:

ちなみに、エラーは

は、まさに開始 関数で発生します。これらの変数は定義されておらず、他のどこかでもありません。では、スタート 時に何かを追加する必要があるのでしょうか?

これらは、start()で定義し、呼び出された関数に 参照渡しする必要がある。
 
Reshetov:
これらは、start()で定義し、呼び出す関数に参照渡しする必要があります。


これが一番シンプルな方法です。しかし、あるプログラマーが書いた記事を見ていると、start()関数には全く何も定義されていない。

彼のアドバイザーのリンクはこちらです。

http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4

特に、彼がどのようにインテリジェントなコードを書いているのか、とても興味があります。そこで、すべてを別々の関数に書き、そこに変数を宣言せずに必要なものだけを追加してスタート する方法を学びたいと思います。

変数を関数に参照渡しする場合、元の変数のバッファを操作しているのであって、その変数のdoubleを操作しているのではありません。つまり、以前にどの関数で宣言したかは関係ないのです。そうでしょう?

 
hoz:


これは最もシンプルなバリエーションです。しかし、あるプログラマーが書いた記事を観察していると、彼のstart 関数には全く何も宣言されていないのです。

関数の外でスタティック変数を 宣言しておけば、参照で何かを渡す必要は全くありません。

hoz:

関数に参照変数を渡すと、その変数の複製ではなく、渡した初期変数そのもののバッファで作業することになります。つまり、以前にどの関数で宣言したかは関係ないのです。そうでしょう?

考え方が間違っている。関数の引数として変数を渡す場合、関数本体に宣言する必要はありません - 引数の中ですでに宣言されています。渡される先の関数を宣言する必要があります。
 
hoz:


これが一番簡単な方法です。しかし、あるプログラマーの記事を見ていると、彼のstart 関数には全く何も宣言されていない。

彼のアドバイザーのリンクはこちらです。

http://www.forextrade.ru/media/Image/MQLabs/181_ag/ChannelByMACross_Expert.mq4

特に、彼がどのようにインテリジェントなコードを書いているのか、とても興味があります。そこで、すべてを別々の関数に書き、そこに変数を宣言せずに必要なものだけを追加してスタート する方法を学びたいと思います。

変数を関数に参照渡しする場合、元の変数のバッファを操作しているのであって、その変数のdoubleを操作しているのではありません。つまり、以前にどの関数で宣言したかは関係ないのです。そうでしょう?


彼はまた、知的に を書いている。

読む

はい、行を変更してください

if(!Trade(signal, priceForBuy, priceForSell))

まで

if(!GetPriceToInput (signal))