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

 
端末は余分な文字をすべて破棄するだけです。

このボリュームで開けば。
0.029

0.02ロットオープンします

と、そのボリュームで開くと

NormalizeDouble(0.029,2)
0.03ロットオープンします。
 
multiplicator:

小数点 以下の桁数を計算するにはどうしたらよいですか?

例えば、最小ロットが0.01であることを知りました。

小数点 以下の桁数が2であることはどのように推測すればよいのでしょうか?
で、オーダーボリュームを小数点以下2桁に正規化します。

これがコードネーム です。
void OnStart()
  {
  double minlot=MarketInfo(Symbol(),MODE_MINLOT);
  Alert(d(minlot));
  }




int d(double x)
{
   int n;
   for(n=0;n<8;n++)
   {
      if(x==NormalizeDouble(x,n))      
      {
         return(n);
      }
   }
return(n-1);
}
 
multiplicator:
端末は、余分な符号をすべて破棄するだけです。

この巻で幕を開けるとしたら。

0.02ロットオープンします。

で、そのボリュームで開くと

0.03ロットオープンします。

あなたは0.25ロットを開く必要がある場合はどうなりますか? ここでは、準備ができて、作業関数は、それらを読んで、それらを使用します。

https://www.mql5.com/ru/forum/131859/page8#comment_3359730


乗算器 です。

例)関数に7ロットという値を入れています。
このブローカーは、最小ロット数が5で、ロット単位が2 です。

これは私のロット正規化関数で、長い間使っていますが、まだ誰も文句を言っていません。 そこでロット増分を求め、それをロット増分の桁数に切り上げることができます。

//_______________________________________________________________________
//Нормализация объема лота для ордера up=true - в большую сторону, иначе в меньшую
//_______________________________________________________________________
double NormalizeLot(double value, bool up=false){
   double res,sizetable[9] = {1.0, 0.1, 0.01, 0.001, 0.0001, 0.00001, 0.000001, 0.0000001, 0.00000001};
   double lotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
   int lotdigits;
   for (lotdigits=8; lotdigits>=0 ; lotdigits--) if (lotStep <= sizetable[lotdigits]) break;
   if(up) res = NormalizeDouble(MathCeil(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits); 
         else res = NormalizeDouble(MathFloor(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits);
return(res);}
//_______________________________________________________________________
さて、あなたはロットステップ、例えば、0.37を持っているサーバーを見つけた場合は、ループ内の必要なロットへの追加と比較のみですが、そのようなサーバーはありませんでした、それはビットコインの非標準のロットがあるようだ、従事していない、私は知らない、あなたは特定の状況が必要です。
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

良い一日親愛なる同僚は、私がバイナリオプションでSHI_silvertrend_signal指標の信号で取引を開始するための私のEAで条件を正しく綴る助けてください、唯一のOP_SELLとOP_BUY.はM1とM5についてです。直前のローソク足の終値でシグナルが発生します。


- シグナル発生時に、シグナル発生後最初のローソク足のみで、注文を出す場合

- 信号を受信した瞬間から5秒以内とする。

- スリッページ内の価格変動許容値



(インジケータは2つのバッファを持ちます)

インジケータコメントから// 両方のバッファをゼロで 埋める。そうしないと、タイムフレームを変更したときにゴミが出ます。

今後ともよろしくお願いいたします。

void OnTick()

{

.....

  if((CountSell() + CountBuy())== 0 && isTradeHours())

   {

      SignalBuy = iCustom(NULL, 0, "SST", AllBars, Otstup, Per, 0,0); //получаемое значение в формате 4546546549.0 

      SignalSell = iCustom(NULL, 0, "SST", AllBars, Otstup, Per, 1,0);



      if((Ask <= SignalBuy - Slippage*Point || Ask  <= SignalBuy + Slippage*Point) && iBarShift(NULL, 0,TimeSeconds(TimeCurrent())))    //<---- помогите дописать условие

      {

         if(OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0,IntegerToString(Expiration), Magic, 0, Blue) > 0)

         {

            Print("Ордер на покупку открыт!");

            return;

         }else Print("Ошибка открытия ордера на покупку!");

      }  

         

      if((Bid >= SignalSell - Slippage*Point || Bid >= SignalSell + Slippage*Point) && iBarShift(NULL, 0,TimeSeconds(TimeCurrent())))  //<---- помогите дописать условие

      {  

      if(OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,IntegerToString(Expiration), Magic, 0, Red) > 0)

         {

            Print("Ордер на продажу открыт!");

            return;

         }else Print("Ошибка открытия ордера на продажу!");

      }

   }

}

.......

インジケーターのコードそのもの(インターネット上にある。コードを公開することがフォーラムのルールに反しないのであれば、そのコード)

//+------------------------------------------------------------------+
//|                                           SHI_SilverTrendSig.mq4 |
//|       Copyright © 2003, VIAC.RU, OlegVS, GOODMAN, © 2005, Shurka |
//|                                                 shforex@narod.ru |
//|                                                                  |
//|                                                                  |
//| Пишу программы на заказ                                          |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Shurka"
#property link      "http://shforex.narod.ru"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#define   SH_BUY   1
#define   SH_SELL  -1

//---- Входные параметры
extern int     AllBars=0;//Для скольки баров считать. 0 - для всех.
extern int     Otstup=30;//Отступ.
extern int     Per=9;//Период.
int            SH,NB,i,UD;
double         R,SHMax,SHMin;
double         BufD[];
double         BufU[];
//+------------------------------------------------------------------+
//| Функция инициализации                                            |
//+------------------------------------------------------------------+
int init()
{
   //В NB записываем количество баров для которых считаем индикатор
   if (Bars<AllBars+Per || AllBars==0) NB=Bars-Per; else NB=AllBars;
   IndicatorBuffers(2);
   IndicatorShortName("SST");
   SetIndexStyle(0,DRAW_ARROW,0,1);
   SetIndexStyle(1,DRAW_ARROW,0,1);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,BufU);
   SetIndexBuffer(1,BufD);
   SetIndexDrawBegin(0,Bars-NB);//Индикатор будет отображаться только для NB баров
   SetIndexDrawBegin(1,Bars-NB);
   ArrayInitialize(BufD,0.0);//Забьём оба буфера ноликами. Иначе будет мусор при смене таймфрейма.
   ArrayInitialize(BufU,0.0);
   return(0);
}
//+------------------------------------------------------------------+
//| Функция деинициализации                                          |
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
//| Собсна индикатор                                                 |
//+------------------------------------------------------------------+
int start()
{
   int CB=IndicatorCounted();
   /* Тут вот та самая оптимизационная фишка. В язык введена функция, которая возвращает количество
   посчитанных баров, причём очень хитро. При первом вызове индикатора это 0, всё понятно, ещё ничего
   не считалось, а затем выдаёт количество обсчитанных баров минус один. Т.е. если всего баров 100,
   то функция вернёт 99. Я ввёл такой код, выше у меня определялась NB - кол-во баров подлежащих
   обсчёту. В принципе этот параметр можно и выкинуть, однако для тех кто в танке (I80286) можно
   и оставить. Так вот, здесь, при первом вызове NB остаётся прежней, а при последующих уменьшается
   до последнего бара, т.е. 1 или 2, ну или сколько там осталось посчитать*/
   if(CB<0) return(-1); else if(NB>Bars-CB) NB=Bars-CB;
   for (SH=1;SH<NB;SH++)//Прочёсываем график от 1 до NB
   {
      for (R=0,i=SH;i<SH+10;i++) {R+=(10+SH-i)*(High[i]-Low[i]);}      R/=55;

      SHMax = High[Highest(NULL,0,MODE_HIGH,Per,SH)];
      SHMin = Low[Lowest(NULL,0,MODE_LOW,Per,SH)];
      if (Close[SH]<SHMin+(SHMax-SHMin)*Otstup/100 && UD!=SH_SELL) { BufD[SH]=High[SH]+R*0.5; UD=SH_SELL; }
      if (Close[SH]>SHMax-(SHMax-SHMin)*Otstup/100 && UD!=SH_BUY) { BufU[SH]=Low[SH]-R*0.5; UD=SH_BUY; }
   }
   return(0);
}
 

Igor Makanu:

res = NormalizeDouble(MathFloor(MathMin(MathMax(value, MarketInfo(Symbol(),MODE_MINLOT)), MarketInfo(Symbol(),MODE_MAXLOT))/lotStep)*lotStep,lotdigits);


(なんと、matmaxの後にmatminという展開です。)

 

最適化キーがないのはどこですか?



どのように最適化するか?


 

インジケーターのシグナルでトレードを開始する条件を正しく指定する方法を教えてください。


Renkoチャート用の簡単なExpert Advisorを書いた ら、こんな感じになりました。

extern double LotSize = 0.01;
extern int Magic = 1;

int prevtime = 0;

int start() {
 
   
//При образовании нового кубика ренко проверка на Buy или Sell и заключение ордера
   if (prevtime != Time[0]) {

   if (Close[1] > Open[1]) {
      OrderSend(Symbol(), OP_BUY, LotSize, ND(Ask), 3, 0, 0,  "RG", Magic, 0, Blue);
      }
   if (Close[1] < Open[1]) {
      OrderSend(Symbol(), OP_SELL, LotSize, ND(Bid), 3, 0, 0, "RG", Magic, 0, Red);
      }
      Magic++;
   prevtime = Time[0];
    }
        return(0);
} 

double ND(double np) {
  return(NormalizeDouble(np,Digits));
}


オフラインのチャートではあまり満足できないので、AG_Renko_Chartというインジケータと組み合わせることにしました。メッセージに添付しています。

しかし、ここでは右端の連子値を返す関数がどうなっているのかを説明します。

iCustom(_Symbol,TF,"AG_Renko_Chart",Step,false,false,Revers,0,0);

下向きのバーか上向きのバーか区別がつかないのですが・・・。そして、多くのトレードをしないような機能を適切に処方する方法・・・。


総じて、頭の回転が悪いのです。助けてください!!!!

ファイル:
 
Roman Shiredchenko:

最適化キーがないのはどこですか?



どのように最適化するか?


これはジョークなのか、それとも社会的なジョークなのか?


 
Alexey Viktorov:

これは冗談なのか、それとも社会をバカにしているのか?


冗談でもなんでもなく、それで社会を馬鹿にしているわけでもない。

異端を書き込む前に、写真をよく見てください。

 
Roman Shiredchenko:

というのは冗談で、そうやってコケるわけではありません。

異端を書き込む前に、写真をよく見てください。

問題は、画面の解像度です。