MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1351

 
MakarFX:

mql4はこちらでも 可能です。

それはないと思います。Expert Advisorは、トレンドラインの形をしたグラフィックオブジェクトを作成します。

   if(PriceDemUp2() != 0 && PriceDemUp1() != 0)
      CreateLine(trendUp, TimeDemUp2(), PriceDemUp2(), TimeDemUp1(), PriceDemUp1(), TrendUpColor);
   if(PriceDemDw2() != 0 && PriceDemDw1() != 0)
      CreateLine(trendDw, TimeDemDw2(), PriceDemDw2(), TimeDemDw1(), PriceDemDw1(), TrendDwColor);

しかし、端末を再起動すると、1点目のパラメータしか利用できなくなります。前のポイントのパラメータは、新しいポイントが形成された後にのみ表示されます。だんだん分かってきました。インジケータが計算した最後のポイントだけでなく、前のポイントも見つける必要があります。最後(最初)のポイントを飛ばして、次のポイントを計算するにはどうしたらよいですか?私は1点目をこのように感じています。

int BarPointDemUp()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
         return(i);
   }
   return(-1);   
}
//////////////////////////////////////
int BarPointDemDw()
{
   int i;
   
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 1, i) != 0)
         return(i);
   }
   return(-1);
 
Youri Lazurenko:

私にはそうは思えません。EAは、トレンドラインの形をしたグラフィックオブジェクトを作成します。

しかし、端末を再起動すると、1点目のパラメータだけが利用できるようになります。前のポイントのパラメータは、新しいポイントが形成された後にのみ表示されます。だんだん分かってきました。インジケータが計算した最後のポイントだけでなく、前のポイントも見つける必要があります。最後(最初)のポイントを飛ばして、次のポイントを計算するにはどうしたらよいですか?私は1点目をこのように感じています。

カウンターを付ける。

int BarPointDemUp()
{
   int i;
   int c=0;
   for(i = 0; i < 70; i++)
   {   
      if(iCustom(NULL, 0, "DeMark Point", LevelDP, 0, i) != 0)
       c++;
        if(c==2)  return(i);
   }
   return(-1);   
}

一般的には,配列を作ってそれを埋めてから,必要な点を配列から取り出します

 
Vitaly Muzichenko:

カウンターを設定する

また、一般的には、配列を作ってそれを埋めてから、その配列から目的の点を取り出します。

ありがとうございます。提供していただいたカウンターは、まさに私たちが必要としているもので、何よりシンプルであるように思います。

サイト更新中に、ご指摘のバリアントを試してみました。すべてうまくいく。ありがとうございました。とてもシンプルで、物事の本質に迫り始めていたのです。さらに、上記の価格と時間の機能を簡素化しました。

 
MakarFX:

何が問題なのかを強調した

黄色のハイライトは不要ですので、削除してください。

緑色にハイライトされた関数は、OnStart()の外側になければなりません。

新しいバーを 定義する場合は、茶色のハイライトを使用します。

ありがとうございます!)

 

パラボリックの トレーリングストップの動作コードを探しています。この機能をExpert Advisorに追加して、価格が一定以上上昇したときにトレールするようにしたいのですが、どのようにすればよいのでしょうか?私は事前に感謝し、経験豊富な、知識のある人々を頼むでしょう - 私は何とかそれに聖杯を追加する必要があります;-)

 
DanilaMactep:

パラボリックの トレーリングストップの動作コードを探しています。この機能をExpert Advisorに追加して、価格が一定以上上昇したときにトレールするようにしたいのですが、どのようにすればよいのでしょうか?事前に多くの感謝、そして経験と知識のある人々によって渡されないようにしてください - 私は何とか聖杯を追加する必要があります;-)

このように

//+------------------------------------------------------------------+
   int    Tral = 50;
   double Sar  = iCustom(_Symbol,Period(),"Parabolic",0.02,0.2,0);
//+------------------------------------------------------------------+
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order SELL Modify")}
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderStopLoss()!= Sar)
            if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrNONE))
            {Print("Order BUY Modify")}
           }
        }
 

月日を更新して新年を反映させる方法を教えてください。


   datetime time_current=TimeCurrent();
   MqlDateTime time_structure;
   TimeToStruct(time_current,time_structure);
   int curr_day_year=time_structure.day_of_year;
   int start_day=(curr_day_year-m_days_back)>0?curr_day_year-m_days_back:0;
   time_structure.day_of_year=start_day;
   time_structure.hour=0;
   time_structure.min=0;
   time_structure.sec=0;
   datetime start_time=StructToTime(time_structure);

だから、start_timeは変更された曜日と一緒になるのではと思いました。でも、昔の日付がある...。

うーん...たぶん、秒殺の方が楽なんだろうなぁ...。

 
leonerd:

今すぐには考えられませんが、例を挙げますので、もしかしたら考えが浮かぶかもしれません。

//получаем номер недели в году
int GetWeekNumber(datetime eTime)
   {
   MqlDateTime eDate;
   //получаем дату начала года
   TimeToStruct(eTime,eDate);
   eDate.mon=1;
   eDate.day=1;
   eDate.hour=0;
   eDate.min=0;
   eDate.sec=0;
   datetime StartTime=StructToTime(eDate);
   //возвращаем дату назад в структуру, чтобы определить день недели начала года
   TimeToStruct(StartTime,eDate);
   return(int((eTime-StartTime+86400*eDate.day_of_week)/604800));
   }

一案https://www.mql5.com/ru/users/integer

Dmitry Fedoseev
Dmitry Fedoseev
  • www.mql5.com
Профиль трейдера
 
MakarFX:

このように

Makarさん、コードありがとうございます。icastomに固定値ではなく、外部変数を渡してコードを書き直しました。i ntTral = 50; はトロールが維持される距離ですか、それともトロールが起動される距離(pips )ですか?

 
DanilaMactep:

Makarさん、コードありがとうございます。icastomに固定値ではなく、外部変数を渡してコードを書き直しました。i ntTral = 50; は、トロールがオンになった後の利益の距離(pips )ですか?

トロールがオンになるまでの利益の距離(pips)です。