[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 239

 
dmmikl86 >> :

フォーラムユーザーの皆様へ

インジケータを書いたのですが、移動平均(Buf_2)が描けないという問題があります。

何が問題なのか理解するのを助けてください。

そして、なぜ描画されるかというと、//平均とi<0の後にループに入らなければ、前のループから抜け出さないからです

 i++; // поставьте здесь увеличение на один и всё заработает или присвойте i=0; напрямую ноль
//====================================================================
// average
int n=0;
   while( i>=0) 
      {  
       //----
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }
       
       i--;
       //----
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+
 

こんにちは)


この質問をしたのですが、回答が得られません。


保留中の注文を 出す関数の書き方を教えてください。


BidやAskの代わりに何を入れればいいのですか?ローソク足の1つの高値で保留中の注文が必要です。この値を取得し、どのように関数に入力すればいいのでしょうか?この価格は、取引フローにない場合があります。保留の注文を入れるコードと、それよりもその設定価格をどこから取得するのか、出してくれないかな~。

 

例えば(買いの逆指値の設定例).

(注文を出すために、設定した価格が気配値である必要はまったくありません。

現在の価格で踊ることも、ストップ・レベルを守る限り、どのような価格を取ることもできます。)

('EURUSD - Trends, Forecast & Consequences')

extern int      Magic = 77777;
extern int      StopLoss=400;
extern int      TakeProfit=120;
extern double   Lots=0.1;

static int prevtime = 0;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>


//=======================================================
int start()
{
if(Time[0] == prevtime)   return(0);//ждём появления нового бара
   prevtime = Time[0];//если появился новый бар , включаемся
   

//-----------------------------------------------------------------------
if ( NumberOfOrders(NULL,OP_BUYSTOP, Magic)<1 )  {//если нет открытых бай- поз.
if   ( NumberOfPositions(NULL,OP_BUY, Magic)<1)  {//если нет ордеров байстоп
double priceBUY=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,50,0));//-задаем цену
// установки  ордера по максимуму из посл. 50-ти свечей
double SL=0;double TP=0;//выставляем стопы
if( StopLoss>0)   SL= priceBUY-Point* StopLoss;
if( TakeProfit>0) TP= priceBUY+Point* TakeProfit;  
//ставим ордер 
ticket=OrderSend(Symbol(),OP_BUYSTOP, Lots, price,5, SL, TP,"байстоп", Magic,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); 
               Sleep(10000);   return (0); }
}}
//--------------------------------------------------------------------------

Аналогично ставится селл-стоп


//----------------------------------------------------------------------------
return (0);
 //-----------------Конец функции int start()----
}//int start()

//--------ставим пользовательские функции -------------

の代わりに

double priceBUY=... ....

計算式を入力する

 

私は指標を書いている、その本質は次のとおりです:キャンドルが強気である場合、指標のラインは、上、弱気ダウンです。そして2行目は、現在の行の移動平均です

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int average=14;
//---- buffers
double Buf_1[], Buf_2[];
double sum_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, Buf_1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, Buf_2);
   
   sum_b=0.0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, 
          Counted_bars=IndicatorCounted();

int n=0;
//----
//====================================================================
// график тела с объемом

i=Bars- Counted_bars-1;           // Индекс первого непосчитанного
   while( i>=0) 
      {  
       //----
       if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (NormalizeDouble(Close[ i],Digits)==NormalizeDouble(Open[ i],Digits)) {
         Buf_1[ i] = Buf_1[ i-1];
         }
       
       // average  
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }

       i--;
       //----
      }
//====================================================================


//----
   return(0);
  }
//+------------------------------------------------------------------+
問題:童子形成時に主線がピークを描き、移動平均線が描かれない?
 
dmmikl86 >> :

私は指標を書いている、その本質は次のとおりです:キャンドルが強気である場合、指標のラインは、上、弱気ダウンです。そして、2行目は現在の行の移動平均です

problems: 童子形成時に主線がピークを描き、移動平均線が描かれない?


ifsのブロックは、より効率的な

if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else {  //       if (NormalizeDouble(Close[i],Digits)==NormalizeDouble(Open[i],Digits)) {
         Buf_1[ i] = Buf_1[ i + 1];
}

[i+ 1] - インデックス配列は右から左へ番号が振られるため。これで、ボディがゼロのローソク足が正しく処理されるようになりました。

コードから中間行の buf_2 では、作者が何をしたかったのかが全く分かりません。


 
OneDepo >> :

if-valueブロックは、より効率的なものに置き換えることができる

[i+ 1] - インデックス配列は右から左へ番号が振られるからです。これで、ボディがゼロのローソク足が正しく処理されるようになりました。

コードから中間行の buf_2 では、作者が何をしたかったのかが全く分かりません。


インジケータの値から、期間14の移動平均にしたかったのです。

 
dmmikl86 >> :

インジケータの値に対してプロットした周期14の移動平均にしたかったのですが

すると、こんな感じになります。

//+------------------------------------------------------------------+
//|                                                     dmmikl86.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int BarsCount = 1000;
extern int average=14;

//---- buffers
double Buf_1[], Buf_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    if ( average < 1)
        average = 1;

    //---- indicators
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0, Buf_1);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1, Buf_2);
    //----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
    int i, n;

    //====================================================================
    // график тела с объемом
    double s, sum_b = 0;

    int limit = BarsCount;
    if ( limit > Bars)
        limit = Bars;

    for ( i = limit; 0 <= i; i--) {

        if (Close[ i]>Open[ i]) {
            sum_b += (Close[ i]-Open[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else if (Close[ i]<Open[ i]) {
            sum_b -= (Open[ i]-Close[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else {
            Buf_1[ i] = Buf_1[ i + 1];
        }

        // SMA calculation
        if ( i + average < limit) {
            s = 0;
            for ( n = 0; n < average; n++) {
                s += Buf_1[ i+ n];
            }
            Buf_2[ i] = s/ average;
        }

    }

    return(0);
  }
//+------------------------------------------------------------------+
 
1つのバーに1回だけ取引を行い、このバーにすでに取引がある場合は、それ以上注文を出さないようにするにはどうすればよいですか?
 
このスレッドを見てください。
 
Vinin >> :
このスレッドを見てください。

あるいは、コバレフの教科書の課題27を 読んでください。コード例もあり、仕組みも詳しく解説しています。