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

 
hoz:
問題はこれです。日足、すなわちTF D1上のバーの開始時に正確にトリガーされる指値のペンディングオーダーを置きたい場合。どのように実装すればよいのでしょうか?その理屈はよくわからない。結局のところ、私は単純なリミッターを設置する必要はなく、特定の時間、つまりその日の新しいバーの オープニングに正確に動作するリミッターを設置する必要があるのです。
まず、用語で決める - "特定の時間に正確にトリガーされるリミット" - "リミットトリガー "とはどういう意味ですか? そして、この魔法のプロセスを説明する - 実際の生活の中でそれを実装することが容易になります。 念のため、保留中の注文について 読んでください。
 
Dimka-novitsek:

こんばんは!(^o^)困ったなあ。テスターで2つの注文を開いているのですが、1つはtakeprofit付き、もう1つは全くなしです。

二人とも一度にprofitを取るんだ!!!!

テスターで8回もここを通過しているんですよ。理解できない!

オープンオーダーのクローンを作る理由とは?もっと大きなロットでONEオーダーを開くことはできないのでしょうか?;)
 
戦略なんです。今度はスクリーンショットを撮ってみようかな。あ、お兄ちゃんが来た、間に合わない。変な状況ですけどね。
 
は、このように datetime フォーマットを比較するのが正しいのでしょうか?
datetime t=OrderCloseTime();
             datetime t1=Time[1];
             datetime t0=Time[0];
             if(t1>=t&&t<t0){
               p++;
             }
 
Dimka-novitsek:
これは戦略です。今度はスクリーンショットを撮ってみようかな。あ、お兄ちゃんが来た、間に合わない。奇妙な状況だ。

Dimanの時は、PERSONAL CAMPAIGNを使えるようになるのでしょうか(笑)。

実戦で1年間儲かったか?STARTの金額が割り振られているようなものですね(笑)

 
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);
}
//+------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
//FindOrders()
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  price_b = MarketInfo(Symbol(),MODE_BID);
  price_a = MarketInfo(Symbol(),MODE_ASK);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal, double& priceForBuy, double& priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble(priceForBuy,Digits);
  priceForSell = NormalizeDouble(priceForSell,Digits);
  
  if(!IsTesting())
     GetMarketInfo();
     
  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()
{
  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(priceForBuy);
  }
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
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);
}


実は、この問題はそれほど複雑なものではありません。Trade(int signal, double& priceForBuy, double& priceForSell) 関数に正式なパラメータ priceForBuypriceForSell を渡しました。パラメータはリンクで渡される。このように行われているのではないでしょうか?機能はローカルであり、グローバルではない。

コンパイル中にエラーが発生しました。

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

エラーの発生箇所は?これらのパラメータは、関数GetPriceToInput() ですでに定義されています。

削除済み  
プレッツェル&アフターダブルは何のためにあるのでしょうか(正直わかりません)。
 
YOUNGA:
と、プレッツェル&アフターダブルは何のためにあるのか(正直わからない)

それは、パラメータを参照渡ししたいという強迫観念です。:-)

 
Roman.:

それは、パラメータを参照渡ししたいという強迫観念です。:-)



他に方法は?100回計算するのも同じ?
 
hoz:


そう、私が間違っていたのだ。一般的にはここがはっきりしていれば、価格のみで注文を設定することができます。

以下はそのコードです。

この問題は、基本的に単純なものではありません。Trade(int signal, double& priceForBuy, double& priceForSell) 関数に正式なパラメータpriceForBuypriceForSell を渡しました。パラメータはリンクで渡される。このように行われているのではないでしょうか?機能はローカルであり、グローバルではない。

コンパイル中にエラーが発生しました。

エラーの発生箇所は?これらのパラメータは、GetPriceToInput() 関数ですでに定義してあります。

変数 priceForBuy と priceForSell が見つかりませんでした-とコンパイラは言います。変数の値を参照渡しする方法を考える必要があります。