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

 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
double LastUpperFractalPrice = High [i]; return (LastUpperFractalPrice);

}

ということでよろしいでしょうか?この関数は、最後の上段フラクタルの 価格を返すのでしょうか?

 
Trader7777:

ということでよろしいでしょうか?この関数は、最後の上段フラクタルの価格を返すのでしょうか?


フラクタル探索の例
 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

これはうまくいくのか、いかないのか?

 
Trader7777:
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice;)

}

これはうまくいくのか、いかないのか?


だから、たとえば、そうなる。

double GetLastUpperFractalPrice()
{
   for (int i = 3; i<=Bars; i++)
   {
      if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
      {
         return(High [i]);
      }
   }
   return(EMPTY_VALUE);
}

あなたが持っているように、それはないでしょう。

 
Trader7777:
double GetLastUpperFractalPrice() { for (int i = 3; i<=Bars; i++) { if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i); { double LastUpperFractalPrice = High [i]; } } return (LastUpperFractalPrice);










}

うまくいくのか、いかないのか。


いいえ、パネル内のSRCから コードを挿入してください。

return (ХХ)は、ユーザー関数から返します - そこで入力されたものがこの関数によって返されます - ХХХの値、またはいくつかの計算関数の結果です。

ですから、フラクタルが見つかったら、return (High [i]) と書けば、i番目のバーの最高値が 出力されます - 他に何も工夫する必要はありません。

よくぞ言ってくれました))

 

これは保留注文の初歩的な機能で、パラメータは重要ではありませんが、Expert Advisor(保留注文の既存のループを使用できます)が「新しい価格」を受け取った後、またはそれを検索するために、または何とか同じ価格での注文を配置しないようにすることが重要です。この場合、注文を出すループが止まってはいけない。

double Dist=10000.
文字列のSMB。
double NewPrice;
int i;
int start()
{
RefreshRates()。
SMB=Symbol()です。
{UstanOtlozh();}。
}
return(0)です。
void UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // ここでスクリプトがスローされます。
RefreshRates()。
SMB=Symbol()です。
{
int i=1;
while(i<=OrdersTotal()の場合)
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // がある場合。
{ // オーダー解析。
if (OrderSymbol()!= SMB) continue; // 私たちの金融商品ではありません。
int Tip=OrderType(); // オーダータイプ
if (Tip<2) continue; // 成行注文
double NewPrice=OrderOpenPrice(); // 注文価格
{
while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point)とする。
{
NewPrice=NewPrice+50*ポイント。
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,NULL,0,CLR_NONE)を実行。
if(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point)。
が壊れる。
}}}}}}

 
ALXIMIKS:
MT4 EDITORの555ビルドをコンパイルして使用するように修正しました。

まさかこんな単純なことを聞くとは思わなかった。コンパイル時に、BU()関数が関係ないとのメッセージが出ます。私はこのようにしました(コードは与えられている)今はすべてがコンパイルされますが、ブレークイーブン関数が動作しません。他のEAでも同じようなBreakevenの機能を見たことがあります。

int start()
  {
   if(Volume[0]>1) return; 
  
   if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2])  // продажа
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
   }
   else
   if (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);   
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
    }
   if (CountTrades()>0)
      {
      otype = FindLastOrderType();
      if (otype == OP_BUY)
         { // ценапоследнего ордера на покупку
         price = FindLastBayPrice();
         
         if ((Bid - price) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);  
            }
         }
      else if (otype == OP_SELL)
         { // цена последнего ордера на продажу
         price = FindLastSellPrice();
         
          if ((price - Ask) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);  
            }
         }
      }
    BU();  
    return(0);
  }
 
alexey1979621:

まさかこんな単純なことを聞くとは思わなかった。コンパイル時に、BU()関数が関係ないとのメッセージが出ます。私はこのようにしました(コードは与えられている)今はすべてがコンパイルされますが、ブレークイーブン関数が動作しません。他のEAでも、全く同じ損益分岐関数が働きます。




唯一の理由は、不正確な if(...) 演算子 return; が、プログラムの最初に1つだけあるようです。
 

諸君!!!あなた方は何を勘違いしているのですか?

iFractals() はフラクタルのバー番号ではなく、価格を 返します。

 
tara:

唯一の理由は、if(...)演算子のreturnが正しくないことです; プログラム冒頭にあるようです。
こちらは削除されました。しかし、問題は別のところ、つまり正規化にあるのです。なぜかExpert Advisorは小数点以下が5桁ではなく4桁で表示されています。
extern double  Lots             = 0.1;
extern string Сomment           = "Pattern_1";
extern int TakeProfit           = 10;     
extern int StopLoss             = 0;   
extern int Step                 = 2;   

extern int BULevel              = 2;
extern int   NotBULevel         = 2;         // Уровень безубытка в пунктах

extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 111;



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==5) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
            Step *= 10;
            BULevel *= 10;
            NotBULevel *= 10;
         }
      return(0);
}
どうすれば直るのか?