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

 

この状況を理解するのに役立っています。

テストF2において、Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i);とすると全てうまくいくのはなぜでしょう?

しかし、別のケースでは、testF1、同じアクションでBuf0[i]=iMA(NULL、0、8、0、MODE_EMA、PRICE_OPEN、i - 1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i); 最後のバーは崩壊した? なぜそれがiCCIではなくiMA崩壊したバーで発生しないのだろう?

何か解決する方法はありますか?

ファイル:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

無限大のYEMの場合、i=0のときに-1バーを計算するときにスローされます。

この方がいいんです。

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

そして、あなたが引用した変形例のように、1-n bar 右にシフトする必要がある場合、SetIndexShift(0,1) を介して init で明示的に実装するのがよいでしょう。

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

yem が無限大になると、i=0 のときに -1 bar を計算するときにスローされます。

この方がいいんです。

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

そして、あなたが引用した変形例のように、1-n bar 右にシフトする必要がある場合、SetIndexShift(0,1) によって init で明示的にそれを実装する方がよいでしょう。



どうもありがとうございました。でも、よく理解できたのですが、なぜiCCIではOKでiMAではダメなのでしょうか?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


の場合、価格から発注価格までの距離を計算しているので、価格から現在のストップまでの距離が必要です!)

ショートが立っていれば1番目のブロックに、ロングが立っていれば2番目のブロックに、そしてトレーリングストップに誘導されます。

ショートが良ければ最初のブロックへ、ロングなら2番目のブロックへ、その後に計算、チェック、トレーリングストップとなります。


やっぱりできない...。長いのしか試さない、色々試しすぎて、何をしたか覚えてない))
 
clubsmi:


どうもありがとうございました。でも、よくわかったのですが、なぜiCCIではうまくいって、iMAではうまくいかないのでしょうか?


あちこちでミスがありましたが、iCCIの場合は計算のクセがあるので、目立たないだけなんです。

と、MA、特にEMAの適用が、その可視化につながると思います。

削除済み  
vadynik:

それでも何も出てこない...。長いだけで、いろいろ試しすぎて、何をやったか覚えていない))

Slの代わりにOrderStopLoss()を入れる。
 
Vinin:

チップで生活するのか?
専門家になるまで
今はチップは必要ないんでしょう?:)
 

例えばEURAUDとAUDUSDの2つの買い または売りの注文を 出すプログラムがあります。このプログラムは、ターミナルにこれらのペアまたは他のペアの未決済注文がない場合にのみ動作します。ターミナルに注文が1つでもある場合、取引は開始されません。質問ですが、ターミナルに未決済の注文があるかどうかに関わらず、注文を開始するプログラムをどのように作成すればよいのでしょうか?ご回答をよろしくお願いいたします。

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

例えばEURAUDとAUDUSDの2つの買いまたは売りの注文を出すプログラムがあります。このプログラムは、ターミナルにこれらのペアまたは他のペアの未決済注文がない場合にのみ動作します。ターミナルに注文が1つでもある場合、取引は開始されません。質問ですが、ターミナルに未決済の注文があるかどうかに関わらず、注文を開始するプログラムをどのように作成すればよいのでしょうか?ご回答をよろしくお願いいたします。


チェックを外す
if(OrdersTotal()==0)
 
evillive:

チェックを外す
しかし、EURAUDとAUDUSDのように、指定したペアで2つの取引を開くだけでよいのです。