[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 132

 
Roman.:

IMHOは、複雑ではなく、非常に簡単に「指示」または「送信」することができます。

まあ確かに提案するよりも「送る」すなわち「send」の方が簡単ですからね。そして実際、教科書で私をつつくように何も聞いていないのです。一箇所に重複して書いたのは事実ですが、本質は変わりません。

artmedia70 です。

最後に、あなたがやりたいことを具体的に教えてください...。例:MAK so-and-soが上昇しており、MAK so-and-soを上回り、価格がMAK so-and-soの下/上のある時点で、それが本当 であれば、ある距離で保留注文を出します。大まかなアルゴリズムをお伝えします。このようなコードの断片は、文脈から切り離されているため、正しい方向に導くことは困難です。やはり課題は小学5年生向け(大げさ)。



ここでは、テスト版のコードを添付して、私の投稿でも公開しています。

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

extern string ___H0 = " ___________ Параметры МА ____________ ";
extern int i_TF = 0,
           i_fastMaPeriod = 10,
           i_slowMaPeriod = 21;
extern string ___H1 = " _____ Параметры ордера _______";
extern int i_magic = 3333021;
extern double i_thresholdFromMa = 5;                           // Отступ от МА
// Машечки
double fastMa,
       slowMa;
double pt;
// Переменные рыночного окружения
double g_spread,
       g_stopLevel,
       g_tickSize;
// Идентификаторы положений машек
#define MA_DIRECT_TO_UP      0                                 // Машки направлены вверх
#define MA_DIRECT_TO_DOWN    1                                 // Машки направлены вниз
#define MA_DIRECT_TO_NONE   -1                                 // Машки во флете
#define SIGNAL_BUY           0                                 // Сигнал на покупку
#define SIGNAL_SELL          1                                 // Сигнал на продажу
#define SIGNAL_NO           -1                                 // Сигнала нет

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{
   GetMarketInfo();
   
   if (Digits  == 2 || Digits == 4)
       pt = Point;
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
   if (Digits == 6)
       pt = Point * 100;
   if (Digits == 7)
       pt = Point * 1000;
   

  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  g_spread = MarketInfo(Symbol(),MODE_SPREAD);
  g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
  g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}
//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa + i_thresholdFromMa * pt) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником

       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
   if (ticket > 0)
 
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa - i_thresholdFromMa * pt) < Bid)           // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником
   
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0)
    
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем относительное положение машек                                              |
//+-------------------------------------------------------------------------------------+
int GetStateMa(double fastMa, double slowMa)
{
   if (fastMa > slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_UP);                 // ..машки направлены вниз
   
   if (fastMa < slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_DOWN);               // машки направлены вверх
   
   return (MA_DIRECT_TO_NONE);                   // Машки не имеют выраженного направления
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal)
{
   if (signal == SIGNAL_BUY)                     // Если сигнал на покупку..
       if (!OpenBuy(fastMa, slowMa))             // ..покупаем
          return(false);
   
   if (signal == SIGNAL_SELL)                   // Если сигнал на продажу..
       if (!OpenSell(fastMa, slowMa))           // ..продаём
          return(false);
       
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP)       // Если машки указывают вверх..
       if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
           return(SIGNAL_BUY);                       // ..функция возвращает сигнал покупки

   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN)      // Если машки указывают вниз..
       if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
       return(SIGNAL_SELL);                          // ..функция возвращает сигнал продажи
   
   return (SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);

// Отслеживание открытия нового бара
   static datetime lastBarTime = 0;    // Время проведения последних рассчётов
   
   if (lastBarTime == iTime(NULL, 0, 0))         // На текущем баре все необходимые действия..
       return (0);                      // ..уже были выполнены

// Рассчёт сигнала   
   int signal = GetSignal();
   
// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);
   
   lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
                                       // .. успешно выполнены
  return (0);
}

注文の価格がMAより上(下)+(-)のオフセットであることが条件として明示されています。

これです。

if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt )

シグナルは、価格がMA +(-)インデントの「ギャップ」 エリアにあるときのみ計算される必要があります。

例えば買い付け機能で。

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);

購入はfastMaよりi_thresholdFromMa * ptだけ 上でなければならない。

実は、ないんです。言葉のせいなのか、振りのバグなのか。他にどう説明すればいいのでしょうか?私は、条件や関数を追加することなく、コード全体を与えました(1つの裸のシグナルとオープニングのみ)

もう、はっきり書いてある(テスターのため、本気では確認していない!)。

開き方はこうです。

開店場所が違う...。

artmedia70 です。


強調表示について:始値で作業すれば、ゼロバーでMAが再描画されることはありません。

1小節目の条件をあえて作って、混乱しないようにしました。要は、どう動かすか...ですね。
ファイル:
test_ma.mq4  8 kb
 
各時間の4分5秒などの開始フラグは、インジケータに定義する必要があります。
if( Minute()==15)
足りないものはない。正しい方向へ押し出す。
 

質問なのですが、取引基準を作る際に右にシフトした移動平均 線を使用した場合、つまりシフト値が正である場合。

それから、シグナルを形成するとき、私はゼロまたは最初のバーの移動平均の値を使用するのではなく、シフトの値に対応するインデックスを持つバーで使用する必要があります。

 
Operr:
各時間の4分5秒などの開始フラグは、インジケータに定義する必要があります。


if( Minute()==15)// так будет работать в течении 1 минуты (от 15 до 16)
if( Minute()>=15)// так от 15 минут и до конца текущего часа
 
Tincup:

質問なのですが、取引基準を作る際に右にシフトした移動平均線を使用した場合、つまりシフト値が正である場合。

それから、シグナルを形成するとき、私はゼロまたは最初のバーの移動平均の値を使用するのではなく、シフトの値に対応するインデックスを持つバーで使用する必要があります。


移動平均をチャートに載せて、必要な指数を確認する。視覚的に確認することができます。
 
hoz:

まあ間違いなく、提案するよりも「送る」すなわち「send」する方が簡単です。実際、教科書で突いてくるようなことは何も頼んでいません。一応重複して書きましたが、本質は変わりません。

ここにテストコードのバリアントを添付し、私の投稿でも公開しています。

注文の価格がMAより上(下)+(-)のオフセットであることが条件として明示されています。

これです。

シグナルは、価格がMA +(-)インデントの「ギャップ」 エリアにあるときのみ計算される必要があります。

例えば買い付け機能で。

購入はfastMaよりi_thresholdFromMa * ptだけ 上でなければならない。

実はないんです。私の言語のバグか、マウスのバグか、どちらかです。他にどう説明すればいいのでしょうか?私は、条件や関数を追加しないコード全体(むき出しのシグナルとオープニングの1つだけ)を示しました

もう、はっきり書いてある(テスターのため、本気では確認していない!)。

開き方はこうです。

特に1本目のバーで条件を作ったので、混乱することはないでしょう。要は、どう動かすか...ですね。
改めてお聞きしますが、具体的にはいつ頃発注されるのですか?あなたのコードの答えではない (それを理解したくない - 分析のための独自のコードの十分がある)、そしてちょうど言葉

例:あるMAの上/下に保留注文を出したい。バッ、バッ、バッ、バッ、バッ、バッ、バッ、バッ、バッ、バッ、バッ ...。

2回目ですが、説明してください、そんなに難しいんですか?私たちは、とっくにあなたの問題を解決しているはずです。

 
また、fastMAとslowMAがグローバルに定義されている場合、なぜ関数に渡すのでしょうか?すべての関数は、呼び出された関数に パラメータを渡さずに、とにかくそれらを見ることができます。
 

こんにちは。

EAにおけるGAPの扱いについて教えてください。

週末にGEPがよく発生するのですが、発生後に注文のある作業がハングアップしてしまうのですが、どうすれば直るのでしょうか、事前にありがとうございました

 

Artyomさん、MathMaxを 使った表現とifを使った表現では、どちらが速く動くと思いますか?

double dist = MathMax(MathMax(NormalizeDouble(Dist*Point,Digits),spread),MathMax(StopLevel,FreezeLevel));//это?
// или это?
double dist = NormalizeDouble(Dist*Point,Digits);
if(dist < spread) dist = spread;
if(dist < StopLevel) dist = StopLevel;
if(dist < FreezeLevel) dist = FreezeLevel;


言葉で説明しなかったのは、この表現が私のエラーを回避するのに役立っていることは明らかだからです130。

ありがとうございました。

 
hoz:

平均値をチャートに載せて、必要な指数を確認します。視覚的に確認することができます。

あなたの答えがよく分からないので、もう一度聞きます。取引条件を策定する際に、正しく理解されましたか?

対応するバー数のMA値を逆向きに使用する必要がありますが、画像内の黄色い矢印で示された値は使用しないでください。

ご回答を理解した上で、図を描きました。