[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 137

 
hoz:

現時点でのタスクは、fastMaが slowMaを 上方に横切った...というものです。ということで、どこで買えばいいのか探しているところです。次に、価格すなわちアスク(買いを検討しているため)がfastMa( 正確な値はなく、ある程度の偏差が必要で、これはi_thresholdFromMaで 変更します)に達するまで待ちます。価格がfastMa +- i_thresholdFromMaに 達するとすぐに Expert AdvisorはBUYSTOPを (fastMa + buyHear * pt)に設定すべきです。

私が考え出したものは、ある端末では動作せず、別の端末では常に動作するわけではありません。全体的に何かがおかしい。

ここでbuyHear機能の最後のバリエーション。

以下は入力パラメータです。

スクリーンショットでエラーが確認できます(OrderSend()では、価格が赤い杖の上に供給され、スクリーンショットで見た注文は下にあります...)。

数日留守にしていたのですが...。気になるのは、同じパラメータでも、計算に使うワンドと同じようにチャートにワンドが投げ込まれているのか、ということです。もしかしたら、そこに犬が埋まっているのかも?

(それでもコードを掘り下げて分解する時間はなかった)。

私なら、例えば、こんな機能を作ります。

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

を呼び出して、パラメータを取得します。

 

こんにちは!アドバイスお願いします。インジケーターのシグナルが買いを誘発しているので、次の2本のローソク足が上向きであることを確認してから注文を出します。

 
Top2n:

こんにちは!アドバイスお願いします。買いシグナルが発生したら、次の2本のローソク足が上向きであることを確認してから注文を出します。


そこで、直近の2本のローソク足の上昇と、2本前の注文を同時に開ける条件を確認します。
 
Roger:

そこで、最後の2本のローソク足が上がっていることと、2本後ろのバーを同時に注文を開ける条件を確認します。

どうすればいい?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


そして、そうであれば、信号がトリガされ、確認のために待つだけ2バーを上下にバーの後。

シグナル発生時のバー、シグナル発生後のバーを記憶し、その2つが上昇か下降かを比較し、そして......というのが必要です。

 
Top2n:

どうすればいい?


シグナルが動作した場合、我々は確認を待つが、バーが上または下に行った後。

それは、信号の上のバー、信号の後のバーを覚えて、2つが上昇または下降している場合、それらを比較し、次に......する必要があります。

bay_minの取得方法を示してください。
 
Top2n:

どうすればいい?


シグナルが動作した場合、我々は確認を待つが、バーが上または下に行った後。

それは、信号の上のバー、信号の後のバーを覚えて、2つが上昇または下降している場合、それらを比較し、次に......する必要があります。



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
エキスパート・アドバイザーに関する質問

簡単なExpert Advisorを作成していますが、多くの問題に遭遇しています。

その条件は

現在のバーの終値を記憶し、前の4本目のバーがスライドバーであればStartpriceという変数に入力しています。


条件を満たした場合、そのバーの終値(Startprice)を示すアイコンを描画します。

私が得たものは、アイコンが描画されることですが、一度だけです。

バーの終値が0.00001のStartprice価格と一致しないのですが、なぜですか、どのように修正すればよいですか。

四捨五入や5桁へのトリミングを試みても、うまくいきませんでした(

印刷を使ったログでは、Startpriceという値で、4桁以下までの数字しか表示されません。

端末のデータウィンドウと同じ精度を実現するには?

この小数点の問題は、スライダー自体にも当てはまります。printでその値を呼び出すと、4桁以上のログは取得できない。



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
テストパラメータと時間
 
DoubleToStr(number,Digits)を使って出力する。Digitsの代わりに、好きな精度を書くことができます。アイコンを設定するバーの時刻をアイコン名に追加します。
 
artmedia70:
出力には DoubleToStr(number, Digits) を使用します。Digitsの代わりに、好きな精度を書くことができます。アイコンを設定するバーの時刻をアイコン名に追加します。


そうすれば

Startprice=DoubleToStr(Close[0],5);

it's not working, it's blaming '=' - incompatible types C:\fortestexpertsne.mq4 (34, 14)

どう書けば正しいのか?

返信ありがとうございます、一週間悩みました )

 
artmedia70:
DoubleToStr(number, Digits)を使用します。Digitsの代わりに、希望する精度を書くことができます。設定するアイコンの名前にバータイムを追加します。 。

が、出力については、プリンタは4桁以下しか印刷しないとのことですが、どうなんでしょうか?

then ifPrint(DoubleToStr(Startprice,5)); // Startpriceを表示する。

が5つ出ます。

しかし、ここではバーの時刻を追加する方法を説明します。

このラインは、バーの時間を追加していない?

  datetime TmR1=Time[0];