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

 
lil_lil:

4つのポジションを一度に決済しているのですが、損切り機能で1つずつカウントするにはどうしたらよいですか?

スリッページのため、同じ価格ではなく、時間も異なる可能性があります。

トライアルです。

ブローカーが反対売買を許可している場合、我々は、終値を確定するために、累積的に決済された注文の数量と同じ数量の反対売買注文を開く必要があります。すると、終値が確定し、反対注文を決済するために、のんびりと4回の取引を 行うことができるのです。

 

マージンの計算方法を教えてください。

ブローカーによっては、ポジションごとに証拠金を徴収するところもあります。また、一部の証券会社では、売り買いの出来高の差だけで(例:口座がフルロックの場合、証拠金はゼロ)


マージンの計算方法をプログラムで決定する方法は?

 

こんにちは。MAより上のフラクタルを探しています。

MAより上のフラクタルを探すには、あるバーを記憶し、そのバーからフラクタルを探し、それが最初に見つけたものより小さければ、真

コメントで常に虚勢を張る

Comment(f_ma(Symbol(),0,i));
//+----------------------------------------------------------------------------+

bool f_ma(string sy="0",int tf=0,int nf=0) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0,MA=0,fr1,fr2;
   int    d=MarketInfo(sy,MODE_DIGITS),s;
   if(d==0) if(StringFind(sy,"JPY")<0) d=4; else d=2;
   int    i,k=iBars(sy,tf),kf,num_bar;

   for(i=nf+2; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      MA=iMA(NULL,0,35,0,MODE_EMA,PRICE_CLOSE,i);
      if(f!=0) 
        {
        // kf++;
         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);continue;}
         
        }
     }
     //
      for(i=nf+ num_bar; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      if(f!=0) 
        {
        fr2=NormalizeDouble(f, d);
        if(fr2<fr1) return(true);
        }
     }
     
     
   return(false);
  }
 
Ghabo:

こんにちは。MAより上のフラクタルを探しています。

MAより上のフラクタルを探すには、あるバーを記憶し、そのバーからフラクタルを探し、それが最初に見つけたものよりも低ければ、真

コメントで常に虚勢を張る

問題はこの行にある

         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);continue;}


フラクタルが発見され、それがMAの上にある場合、我々はそれを継続するのではなく、サイクルを中断する必要があります。最初のフラクタルが見つかったら、次のフラクタルがあり、3番目のフラクタルがあり......という具合に。

 
Alexey Viktorov:

問題はこの行にある


フラクタルが発見され、それがMAの上にある場合、我々はそれを継続するのではなく、サイクルを中断する必要があります。最初のフラクタルが見つかったら、次のフラクタルがあり、3番目のフラクタルがあり......という具合に。

ありがとうございます。break;に置き換えた。これで常にtrueになるが、if(fr2<fr1)の 条件を満たせなくなる。
 
Ghabo:
ありがとうございます。break;に置き換えた。これで常にtrueになるが、if(fr2<fr1)の 条件が満たされない。

そこで、関数の結果を表示する前に、この条件を追加する必要があります。何がそんなに難しいのでしょうか?

 
Alexey Viktorov:

そこで、関数が結果を出力する前に、この条件を追加する必要があります。何がそんなに難しいんだ?

条件を満たさない場合、関数はfalseを返してはいけないのでしょうか?

#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
if(rates_total<100) return(0);
int limit=rates_total-prev_calculated;
if(limit>200)limit=200;
   for(int i=limit; i>0; i--)
     {
     
     
     Comment(f_ma(Symbol(),0,i));
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
  //-------------------
  bool f_ma(string sy="0",int tf=0,int nf=0) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0,MA=0,fr1,fr2;
   int    d=MarketInfo(sy,MODE_DIGITS),s;
   if(d==0) if(StringFind(sy,"JPY")<0) d=4; else d=2;
   int    i,k=iBars(sy,tf),kf,num_bar;

   for(i=nf+2; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      MA=iMA(NULL,0,35,0,MODE_EMA,PRICE_CLOSE,i);
      if(f!=0) 
        {
        // kf++;
         if(f>MA) {num_bar=i; fr1=NormalizeDouble(f, d);break;}
         
        }
     }
     //
      for(i=nf+ num_bar; i<k; i++) 
     {
      f=iFractals(sy,tf,MODE_UPPER,i);
      if(f!=0) 
        {
        fr2=NormalizeDouble(f, d);
        if(fr2<fr1) return(true);
        }
     }
     
     
   return(false);
  }
  
 
Ghabo:

条件を満たさない場合、関数はfalseを返してはいけないのでしょうか?

iFractalsがゼロまたは空の値を返すことを確認します。

 
Alexey Viktorov:

iFractalsがゼロまたは空の値を返すことを確認します。

データウィンドウに 空の値がある。if(f!=0) を if(f!=EMPTY_VALUE) に置き換えたが、結果に変化はない。
 
Ghabo:
データウィンドウに 空の値がある。if(f!=0) を if(f!=EMPTY_VALUE) に置き換えたが、結果は変更されていない。

1.チェックと言ったのであって、交換ではない。iFractals はフラクタルがないときは 0 を返します。普段から使っているわけではないので、当然、そんな雑学で未乾燥の記憶の残骸を詰まらせることはない。

2.この機能は、ひどい書き方ではあるが、今でも問題なく動作する。

3.最後の値はCommentに表示されます。に置き換えてください。

     Print("************ ", f_ma(Symbol(), 0, 0));
そして、何回印刷されるか見てみましょう
2018.07.30 21:02:43.656 00 EURUSD.e,H1: ************ true