過去36回の最高値の上にH_線を引く。 - ページ 2

 

ストクロは気にしないので、現在のK%だけで十分です。

チェック オブジェクトのコード。

 int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);

for (i=ot;i>=0;i--)
{
   if (StringSubstr(id,0,7)=="tomato ")
      {
      if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
      }
   if (StringSubstr(id,0,6)=="olive ")
      {
      if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      }  
}

これは、96本のローソク足の後にIDラインを削除するものです。

今やらなければならないことは、すでにトマトラインがチャート上にある場合、EAが新しいトマトラインを描くのを止めることです。

次のようなものを追加しようと考えています。

if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ..............
         }

..............................=停止と最初から(しかし、まだオリーブ条件を読んでいる)。

を追加しようと思っています。

int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
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];
string Hdate = TimeToStr(H,TIME_DATE|TIME_MINUTES);
datetime L=Time[low_nr];
string Ldate = TimeToStr(L,TIME_DATE|TIME_MINUTES);


/////////////////////////////////////////////////////////////////////////////////
//---
 int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);

for (i=ot;i>=0;i--)
{
   if (StringSubstr(id,0,7)=="tomato ")
      {
      if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
      }
   if (StringSubstr(id,0,6)=="olive ")
      {
      if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      }  
}
//---


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

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

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

if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive "+Ldate,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive "+Ldate,OBJPROP_COLOR,Olive);
   //Print ("olive ON"+low_price);
   }
 
   
   
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

を言い換えると

チャート上に最大1行のトマトラインを表示させたい。

もしその線がOrderSendに使われるなら、その線を削除する。

もし、そのラインが期限切れ(96)になったら、そのラインを削除してください。

オリーブも同様。

もし、トマトの線がすでにチャートにあれば、トマトの線がなくなるまで、それ以上のトマトの線はない。

ということです。)

 
cichichan:

を言い換えると

チャート上に最大1行のトマトラインを表示させたい。

もしその線がOrderSendに使われるなら、その線を削除する。

もし、そのラインが期限切れ(96)になったら、そのラインを削除してください。

オリーブも同様。

もし、トマトの線がすでにチャートにあれば、トマトの線がなくなるまで、それ以上のトマトの線はない。

ということです。)


datetime L=Time[low_nr];
string Ldate = TimeToStr(L,TIME_DATE|TIME_MINUTES);

というのは、その時にラインを作成するのですか?

 int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);

for (i=ot;i>=0;i--)
{
   if (StringSubstr(id,0,7)=="tomato ")
      {
       //  line found
      }
}

では、他の線を描かないようにするにはどうすればいいのでしょうか?

 

オブジェクトの名前を初期値に戻して、同名制限のためにスクリプトが線を描かない ようにしようと思ったのですが、名前を変更する機能がないんです。

でも、名前を変える機能がないんです。

というわけで、このままではダメだ!ということで、このページでは、その方法を紹介します。

 
cichichan:

オブジェクトの名前を初期値に戻して、同名制限のためにスクリプトが線を描かないようにしようと思ったのですが、名前を変更する機能がないんです。

でも、名前を変える機能がないんです。

でも、名前を変える機能はない。

新しい線はいつ作るのですか?

最高値や最安値のバーを見つけたときではなく、そのバーがあるときです。

そして、あなたはラインが存在しない場合にのみ作成する必要があります。

だから、新しい行を作成する場合は、Time[0]の時間を使用してください。

あなたのオブジェクトを見つけたら、それはどんな名前を持っていますか? ==>文字列 id=ObjectName (i)。

この名前がStringSubstr(id,0,7)=="tomato"であるとき、あなたは何をする必要があるのでしょうか?

 

最初の投稿に戻ってください。

"これを実行すると、トマトとオリーブの最初の設定はOKで、ジャーナルで "tomato ON "が異なる価格レベルになったとしても、チャート上に新しいトマトのラインは得られません。

新しい線が出ないのは、古い線がすでに存在するからです。それを削除すれば、新しい線が引かれます。

 

とりあえず、こんな感じでやってみました。

一行で済むので、96本削除した後、再描画すると、条件が再表示されます。

int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
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];
string Hdate = TimeToStr(H,TIME_DATE|TIME_MINUTES);
datetime L=Time[low_nr];
string Ldate = TimeToStr(L,TIME_DATE|TIME_MINUTES);


/////////////////////////////////////////////////////////////////////////////////
//---
int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);

for (i=ot;i>=0;i--)
{
   if (StringSubstr(id,0,7)=="tomato ")
      {
      if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         Print ("tomato valid");
         break;
         }
      }
}

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


////////////////////////////////////////////////////////////////////////////////
for (i=ot;i>=0;i--)
{
 if (StringSubstr(id,0,6)=="olive ")
      {
      if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      if (StringSubstr(id,6,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         Print ("olive valid");
         break;
         }   
      }  
 }      

///////////////////////////////////////////////////////////////////////////////
if (ot==-1)
{
if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive "+Ldate,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive "+Ldate,OBJPROP_COLOR,Olive);
   //Print ("olive ON"+low_price);
   }
}
   
   
//----
   
//----
   return(0);
  }
 

これはうまくいくのでしょうか?

if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))

文字列は互いに<や>になりうるのか、それが問題だ。

というのも、ジオールが「複数の回線が必要な場合は、それぞれの回線に別の名前を付けなければならない」と言ったからです。その時はその通りでした。

もし、あなたが一行だけ書きたいのだと知っていたら、そんなことは言わないでしょう。Devriesが示した解決策は、複数の行を持つ場合に非常に有効です。

しかし、もし1本の線にしか名前をつけないのなら、ObjectFind("tomato") ObjectDelete("tomato") で、線を引いたときに保存される Time[96] と Time[0] で時間差の問題を解決することができるだろう。

次に起こる問題は、stoch> 75 という条件が 20 Bars あるいは 50 Bars 続くことで、ラインを削除しても、ラインを引く条件は有効で、ラインが削除されるか、注文が入ると、すぐに新しいラインが引かれます。

 

こんにちは

オブジェクトのことは、私の2週間の読書では複雑に思えたので、売りと買いのレベル価格を設定することにしました。

void LevelSset()
{

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


high_bar=iHighest(NULL,0,MODE_HIGH,34,2);
string H=TimeToStr(Time[high_bar],TIME_DATE|TIME_MINUTES);
LSell=High[iHighest(NULL,0,MODE_HIGH,34,2)];


if(Bid<LSell && High[0]<LSell && High[1]<LSell && stoch>75 && LevelSset==false)
         {
         ObjectCreate("tomato "+H,OBJ_ARROW,0,Time[high_bar],LSell+Point*20);
         ObjectSet("tomato "+H,OBJPROP_ARROWCODE,242);
         ObjectSet("tomato "+H,OBJPROP_COLOR,Tomato);
         LevelSset=true;
         Print("LevelSset on "+LSell);
         }
if (Close[2]>LSell && Close[1]>LSell && LevelSset==true)
   {
      LSell=0;
      LevelSset=false;
      Print ("LSell"+LSell+"expired due to close");
   }
}

もし、if (Close[2]>LSell && Close[1]>LSell && LevelSset==true)が機能しないのです。

もし、if (Close[2]>LSell && Close[1]>LSell) を削除して (LevelSset==true) のままにするか、if (Close[2]<LSell && Close[1]<1) に変更すると、機能は 正しく動作するようです。

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

 

何が問題なのか、どなたか教えてください。

ありがとうございます。