どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 747

 
TarasBY:

2) 同じバー上にUPPERとLOWERのフラクタルをそれぞれ同時に存在させることはできない、確認する

は、プログラマのバカのカテゴリに属します。

だから、この名言はバカにしか通用しない。


 
TarasBY:

2) 同じバー上にUPPERとLOWERのフラクタルをそれぞれ同時に存在させることはできない、確認する

は、プログラマーを馬鹿にしたカテゴリーに属します。


両方のフラクタルが同じバー上に存在することができる
削除済み  
Vinin:
両方のフラクタルが同じバー上に存在することができる
ふんかんをわすれた
 
こんにちは

コード内に以下の行があります。

 if (G_time_344 == Time[0]) return (0);
私の理解では、新しいバーが表示されるまでEAが再計算を遅延させる役割を担っています。ゼロバーオープンタイムが 変更されるまで、再計算は停止します。

従って、分単位でEAを開くと、新しい分単位で再計算されることになります。また、H4で開くと、4時間ごとに再計算されますね。

EAが現在のバーの開始時間、つまりターミナルが開いているバーを取得するのではなく、設定で指定する時間を取得するように、この行を正しく書くにはどうしたらよいでしょうか。つまり、例えばH4にEAを配置すると、私がそう設定したため、5分ごとに再計算されます。あるいは1分ごと。


 
_new-rena:
ふんかんをわすれた

分と月の違いは何ですか?


 
evillive:
修正ログで何を訴えているのでしょうか?"Stupidly opens new pending orders" 制限はないが、OrderSendはあるため。
エラーはなく、黄色の三角形が表示されるだけです。
削除済み  
AlexeyVik:

分と月の違いは何ですか?

M1でもいい瞬間はあるのですが、月はどのバーもそうなんです。
 
これ以上の質問はない、自分で解決した。
 
TarasBY:

1) どのようなストラテジーも、同時に開いている注文の数で定義されなければならない。したがって、次の注文を出す前に、すでに何件出ているかを確認する必要があります。

2) 1本の小節の中で、UPPERとLOWERのフラクタルが同時に存在できない場合、それぞれ以下のように分類されるチェック。

は、プログラマのバカのカテゴリに属します。

3) バッファインジケータ値を返す条件を書く前に、それに対してどの値が「空」なのかを正確に知る必要があるのでは?0であることを確認しましたか?

4)コンストラクトのこと。

ほとんどの場合)うまくいきますが、開発者の「自由意志」による発想なので不自然であり、トレーダーにとっては不案内です。代替案として、新しいバーの追跡があります。

5)基本的なことから始めなければならない、これは。

書いてあることが全く理解できていないことを示す。

理解するには、他の人のコードがどのように動作するかを研究し、自分の目的に合わせて修正するのが一番です。頑張ってください。

彼は一点一点、書かれたとおりに表示します。 あなたが一言も言っていない、修正はしていません。 これがコードの全容です。
//+------------------------------------------------------------------+
//|                                                   Strategy 3.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property copyright ""
#property link      ""
#include <Library1.mqh>
extern int Magic=111;
extern int TP=20;
extern int SL=30;
extern int Trall_dist=10;
extern int Shag=10;
extern bool Isp_shag=false;
extern bool Isp_bezubitok=false;
extern double Lot=0.1;
double SS=0,BS=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  double tp,sl;
  if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);       //верхний фрактал,формируется на третьей свече
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);     //нижний фрактал,формируется на третьей свече                                                   
//----
  if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        {
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
        }
     
       }   
   else if(Up==0&&Down>0&&Volume[0]<2)
    {
    if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
    OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
    else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
         {
         for (pos=1;pos==OrdersTotal();pos++)
             {
             OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
             if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
               {
               OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
               } 
             }
         }
    
            
    if(OrdersTotal()>0)
    Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
    return(0);
  }}
//+------------------------------------------------------------------+
私は、読んで、見て、理解したことを書こうとしているのです。 あなたの批評は、MQL4のマニュアルを思い出させます。
 
if(Up>0&&Down==0&&Volume[0]<2)     //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
    else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
        { // К чему относится эта скобка???
        for (int pos=0;pos==OrdersTotal();pos++)
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
          {
          OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
          }
       } // это пара к той...
      }
     


そして、このコード

if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
  else if(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака

というように init() の中で書いた方がよいでしょう。

double   point; // на уровне глобальных переменных

int OnInit()
{
   point = Digits%2 == 0 ? _Point : _Point * 10;
}

そして、start() で

tp = High[3]+TP*point;