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

 
Tema97:

私はチャネルベースの戦略を持っていますが、それに代わるものはありますか?

もちろん、ありますよ。値を計算し、配列または構造体に保存し、EAに使用します。そして、そこからオブジェクトを描画することもできます。値が用意されているのです。
 
Tema97:

私はチャネルベースの戦略を持っていますが、それに代わるものはありますか?

何のためのビルドインなのか?iCustomで インジケータを照会します。
販売用には、#resourceを付けて 埋め込むことができます。
 
以下を実装したい。
1つのシートに異なるタイムフレームを追加する機能(異なるウィンドウで1つのシートに表示)
どこに行けばいいのか、どこを掘ればいいのか、アドバイスをお願いします)は、mqlやWInApiで可能なのでしょうか?
もしかしたら、私が見つけられなかった事例があるかもしれません(
 
kocunyc89:

これを修正するために私を助けてください!それはエラー 'Void' - 型のない宣言36 4と私は再配置またはreturnを書くべき場所?
//-------------------------------------------------------------------------------
Void OnTick()
{.

voidは大文字ではなく、小さな小文字で表記されます。ほら、色が違うでしょ。この単語にカーソルを合わせてF1キーを押すと、多くの場合役に立ちます。

修正後、多くのエラーメッセージが 表示される...エラーメッセージは修正したが、ロジックは自分で確認すること

#property strict

bool Результат;

extern int   SL             = 200,      //Стоплосс в пунктах
             TStop          = 20,       //
             TStep          = 10,       //
             TP             = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0;       // лот, если 0, то динамический
extern double RiskPercentage =  50;      // % от депо на лот, если динамический
extern int    MaxOrders      = 6;        //Максимальное кол-во ордеров одного направления

//--------------------------------------------------------------------
int STOPLEVEL,Magic=123321,tip;
datetime TimeBar;

string txt;
//--------------------------------------------------------------------
int init()
{
   if(Digits==3||Digits==5)
   {
      TStop *=10;
      TStep *=10;
      SL    *=10;
   }
   return(INIT_SUCCEEDED);
}


//--------------------------------------------------------------------
void OnTick()
{
  double Lot = Lots;
  int Ticket = 0;
  if (Lots==0)
  {
    double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
    double minLot = MarketInfo(Symbol(), MODE_MINLOT);
    double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
    double step   = MarketInfo(Symbol(), MODE_LOTSTEP);
    double account = AccountFreeMargin();
    double percentage = account*RiskPercentage/100;
  
    Lot = MathRound(percentage/margin/step)*step;
  
    if(Lot < minLot) Lot = minLot;

    if(Lot > maxLot)Lot = maxLot;
  }

  int buy=0,sell=0;
  for (int i=0; i<OrdersTotal(); i++)
  {
    if (OrderSelect(i, SELECT_BY_POS))
    {
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         tip=OrderType();
         if (tip==0) buy++;
         if (tip==1) sell++;
    }  
  }

  Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",buy,"\nSel ",sell);
  double TrPr=0,StLo=0;
  double L    = NormalizeDouble(Low[0], Digits);
  double L1   = NormalizeDouble(Low[1], Digits);
  double L2   = NormalizeDouble(Low[2], Digits);
  double L3   = NormalizeDouble(Low[3], Digits);

  double H   = NormalizeDouble(High[0],Digits);
  double H1  = NormalizeDouble(High[1],Digits);
  double H2  = NormalizeDouble(High[2],Digits);
  double H3  = NormalizeDouble(High[3],Digits);

  double O   = NormalizeDouble(Open[0], Digits);
  double O1  = NormalizeDouble(Open[1], Digits);
  double O2  = NormalizeDouble(Open[2], Digits);
  double O3  = NormalizeDouble(Open[3], Digits);

  double C   = NormalizeDouble(Close[0],Digits);
  double C1  = NormalizeDouble(Close[1],Digits);
  double C2  = NormalizeDouble(Close[2],Digits);
  double C3  = NormalizeDouble(Close[3],Digits);

                         //LONG
  if (buy<MaxOrders  && TimeBar!=Time[0]&& H>H1&&H1>H2&&H2>H3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_BUY, Lots,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Blue);
    if (Ticket==0)
    Print("Error BUY",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
      TimeBar=Time[0];
    }
  }

                                  //SHORT
  if (sell<MaxOrders && TimeBar!=Time[0]&& L>L1&&L1>L2&&L2>L3)
  {
    if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);
    if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);
    Ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",Magic,0,Red);
    if (Ticket==0)
    Print("Error SELL",GetLastError(),"",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
    else
    {
      Результат=OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Red);
      TimeBar=Time[0];
    }
  }

  Trailing();
}
//!!! куда передвинуть?   return(0);


void Trailing()
{
  for(int i=OrdersTotal() -1; i>=0; i--)
  {
    if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
    {
      if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
        if(OrderType()==OP_BUY)
        {
          if (Bid-OrderOpenPrice()> TStop*Point || OrderStopLoss() ==0)
          {
            if(OrderStopLoss()<Bid-(TStep+TStop)*Point || OrderStopLoss() ==0)
            {
              if(!OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble(Bid-TStop*Point, Digits),0,0))
              Print("Ошибка модификации ордера на покупку");
            }
          }
        }

        if(OrderType()==OP_SELL)
        {
          if (OrderOpenPrice()-Ask>TStop*Point || OrderStopLoss() ==0)
          {
            if((OrderStopLoss()> (Ask+(TStep+TStop)*Point))  || (OrderStopLoss()==0)  )
            {
              if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TStop*Point,Digits),0,0))
                {
                        Print("Ошибка модификации ордера на продажу");
                }
            }
          }
        }
      }
    }
  }
}

 
LRA:

voidは大きな大文字ではなく、小さな小文字で書かれています。色が違うかどうか見てみましょう。この単語にカーソルを合わせてF1キーを押すと、多くの場合役に立ちます。

修正後、多くのエラーメッセージが表示される...エラーメッセージは修正したが、ロジックは自分で確認すること


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

 
トレーダーの皆様、こんにちは。上に載せたコードを元に、シグナルロボットを書いてみました。このロボットはオプションのシグナルをほぼ正確に発生させますが、2バーのタイムラグがあります。同じ結果を2本早く出すには、コードのどこを変えればよいのでしょうか。それとも、不可能なのでしょうか?ありがとうございます。
 
私はカスタムインジケータを持って いる - チャネル - 私はチャネルの上限の値を返す必要があります - どのようにこれを行うには?
 
artmedia70:

int 変数には1970年からの正確な秒数が、datetime 変数には日付が格納されています。

履歴の中の特定のバーが必要な場合、それをどのように指定するかは問題ではありません - 日付または秒数で、いずれにせよ、変数は新しいティックの到着や新しいバーの開始に関係なく、この特定のバーの開始時刻を示すことになります。

ありがとうございます、でももう一つ問題があります。この機能は、新しいシグナルが到着したときのみ使用されるはずですが、この問題はすべてのバーでカウントされます。夜が明けました。誰か何が悪いのか説明してください。193行のatacheのインジケータは、条件付きの関数呼び出し ですが、条件が満たされず、Furction statは、各バーの到着時に計算され、私はすでにエラーを見つけるために退屈している、みんな助けてください!!!!!!!!。よろしくお願いします...。
ファイル:
 

今更ながらわかったのですが、stat関数は他のインジケータから呼び出さ れた場合、その両方がチャート上にあるときに再計算されるそうです。つまり、一度は自分自身のために計算され、二度目はそれを呼び出すインジケーターのために計算される。何ですか?

 

以下、写真で紹介します。上部のコメントは、計算が行われるメインインジケータのバッファの値で、プリント(下)は同じバッファを別のインジケータで呼び出してプリントで出力しただけのものです。その差は大きい!!BUT WHY!!!!

最初の ファイルがメインで、2番目のファイルが最初のファイルからバッファを呼び出す...。

ファイル: