過去36回の最高値の上にH_線を引く。

 

こんにちは

このようなコードで書いてみました。

stochastic(80,30,30) の K% ラインが > 75 のとき、36 bar (34,shift 2) を振り返って、最高値から現在のバーまでの H_line "tomato" を描画します。

ストキャスティック(80,30,30)のK%ライン < 25の時、36バーを振り返り(34,shift 2)、最安値から現在のバーまでH_ライン「オリーブ」を引きます。

int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && stoch<25)
   {
   ObjectCreate("olive",OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive",OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }

これを実行すると、最初のトマトとオリーブの設定はOKで、ジャーナルで「トマトON」の異なる価格を取得しても、チャート上に新しいトマトのラインは表示されません。

EAのアイデアは、このラインを使ってトレードを開始することです。

K%>75 のとき

最高値の(過去36本)を引く

線がONの場合、線が削除されるまで、それ以上線を引きません。

取引が開始されている場合は、線を削除します。

取引が行われておらず、K%>75を決定したバーから24バーが経過している場合にも、線を削除する。

:)

私は私の穴の生活の中で書いた私の最初のコードであるように、plsはどのように問題を見るために私を教えてください。

ありがとうございます

 

別名が必要

      ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
 

その後

   ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);

このコードでは、同じ値段で、25行を置きますが、ローソクのlow_nr(これは常に10で、stoch <25の後の実数であることは重要ではありません)ではなく、ローソク35から開始します。

トマトも同じです。

:(

 

一度オブジェクトを作成すると、同じ名前の別のオブジェクトを作成することはできません。

そのため、最初の1回だけはうまくいきますが、それ以降はうまくいきません(あなたのオリジナルのコードでは)。

もし、条件を満たした最後の線だけをチャートに表示させたい場合は、initでその線を作成し、ObjectMoveを使って オブジェクトを新しい座標に移動させます。

過去のすべての線を表示させたい場合

ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);

high_nrはバーシフトであるため、後日複製される可能性が高く、正しく動作しないでしょう。名前にdatetimeを使用すると、一意になります。

 

 
cichichan:

こんにちは

このようなコードで書いてみました。

stochastic(80,30,30) の K% ラインが > 75 のとき、36 bar (34,shift 2) を振り返って、最高値から現在のバーまでの H_line "tomato" を描画します。

ストキャスティック(80,30,30)のK%ライン < 25の時、36バーを振り返り(34,shift 2)、最安値から現在のバーまでH_ライン「オリーブ」を引きます。

これを実行すると、最初のトマトとオリーブの設定はOKで、ジャーナルで「トマトON」の異なる価格を取得しても、チャート上に新しいトマトのラインは表示されません。

EAのアイデアは、このラインを使ってトレードを開始することです。

K%>75 のとき

最高値の線(過去36本)を引く。

線がONの場合、線が削除されるまで、それ以上線を引きません。

取引が開始されている場合は、線を削除します。

取引が行われておらず、K%>75を決定したバーから24バーが経過している場合にも、線を削除する。

:)

私は私の穴の生活の中で書いた私の最初のコードであるように、plsはどのように問題を見るために私を教えてください。

ありがとうございます

私たちは最初から始めています....

double stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

バー0で確率はバー0の値> 75でどこかに取得し、低い値で終了することができます。

その場合、線を引くのでしょうか? それとも終値で終わるのでしょうか?

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];

iHighestやiLowestを使ったことがありますか? iHighestと iLowestの やり方はこちら。

if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,....

if(stoch < 25) low_price = Low[iLowest(..........

//-----

for(high_nr=2;high_nr<36;high_nr++)   // why do you repeat this ??
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}

ループは、{ }の中にあるものを繰り返すだけなので、ループは不要です。

ということで、ループは必要ありません。

次に、作成する前に

  • 実行中のトレードをチェックする
  • tomato "で始まる名前のオブジェクトがすでに存在するかどうかをチェックし、存在する場合は古いものを削除する必要があるかどうかをチェックします。

というように、作成した瞬間に名前を付けます。

linenamehigh =     "tomato  "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)

でオブジェクトをチェックすることができます。

//----
   int i, ot=ObjectsTotal()-1;
   string id;
//----
   for(i=ot;i>=0;i--)
    {id=ObjectName(i);
     if(StringSubstr(id,0,7)=="tomato ")
      {
      //check when created 
      if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);}
      }  
     if(StringSubstr(id,0,6)=="olive ")
         {
         //.....
         }
    }

リンクをクリックし、何が起こるかを理解するようにしてください。

コード内の......の場所は、自分で記入してみてください。

 
qjol:
何を 達成しようとしているのか指定できますか?


最終的なアイデア。

シグナル1 = K%>75で、バー[1]と現在のバー[0]の高値が過去36バーの最高値より小さいとき(High_point)

High_pointにトマトラインを引く

トマトラインが既に引かれている場合、そのラインが削除されるまで、それ以上ラインを引かない。

トマトラインを使用して取引が開始された場合、そのラインを削除する。

取引が行われておらず、 High_pointを 決定したバーから96バー経過している場合、 そのラインを 削除します。

今、私は各シグナル1(プリント関数が 有効なティックごとに36 "トマトON "を送信すると思います)で1行のみを取得し、私はそれがトマトラインを見つけた後にループを停止するようにコードを指示する必要があります。)

私は正しい道を進んでいるのでしょうか? あなたの助けとアドバイスに感謝します。

今までのコードです。

//+------------------------------------------------------------------+
//|                                                      1expert.mq4 |
//|                                                              ant |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window

extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75)
     {
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price);
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }
 

deVriesの 投稿と同時期に投稿しました。

読みに行きます :)

 
double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr])
   {
   ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]);
   ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
   Print ("tomato ON"+H);   
   }

B.T.W.回線不要でできること

 

あなたが話しているケースは、cichichanはほとんど発生しませんので、あなたが何をするかを見ることができるようにインデックスを使用する必要があります。

http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png

arrow_downが表示されないのは、どこかのバグでしょうか.

//+------------------------------------------------------------------+
//|                                                      lexpert.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 8
#property  indicator_color1 YellowGreen  
#property  indicator_color2 Coral


extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;

 double arrow_up[];
 double arrow_down[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //-------- 
   SetIndexBuffer(0, arrow_up );
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(0,233);
   SetIndexEmptyValue(0,0.0);
//-------- 
   SetIndexBuffer(1,arrow_down);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(1,234 );
   SetIndexEmptyValue(1,0.0);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   int    limit;
   int    counted_bars=IndicatorCounted();

   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   //---- macd counted in the 1-st additional buffer
   for(int i=limit; i>=0; i--)
      { 

double stoch_1, stoch_2;
stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2);
stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,i+2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////


   if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75)
     {
     arrow_down[i] =  High[i] + 5*iATR(NULL,0,200,i);
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price);
      ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false);
      ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); 
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
    else    arrow_down[i] = 0.0;

///////////////////////////////////////////////////////////////////////////////

if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price &&  stoch_2>25 && stoch_1 < 25)
   {
   arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i);
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR, Yellow );
   ObjectSet("olive"+L,OBJPROP_WIDTH,5 );
   ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false);
   Print ("olive ON"+low_price);
   }
   else  arrow_up[i] = 0.0;
   
//----
  } 
//----
   return(0);
  }
 
EAを表示しない。