double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен,
// не видно оператора двигающего индекс массива.// лучше пока не освоили работу с массивами обьявите переменные и не парьтесьdouble MA_0=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,0);
double MA_1=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,1);
if (MA_1 < MA_0)
{ // ..МА последнего бара выше предыдущего
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}
if (MA_1 > MA_0)
{ // ..МА последнего бара ниже предыдущего
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
}
extern int n = 20; extern int t3_period = 5; extern double b = 0.618; extern int int mBars = 300; extern int Bars.Count = 0; int i,t,c; double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n, AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+ int init() { SetIndexStyle(0, DRAW_LINE)を設定します。 SetIndexBuffer(0, Buf1)を設定します。 SetIndexStyle(1, DRAW_LINE)を設定します。 SetIndexBuffer(1, Buf2)を設定します。 return(0); } //+------------------------------------------------------------------+ int start() { int制限。 if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted()。 if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count; for(int i=0; i<limit; i++) {
Igor Kimの関数を書き換えることが可能かどうか教えてください。この関数は、損失がある値を超えたら、すべての負け注文を閉じます。 。
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 25.04.2008 |//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит/убыток |//+----------------------------------------------------------------------------+void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
こんにちは、コーディングの把握の続きです。チュートリアルセクションの記事から例のEAを取り出し、例のコードを置き換えたものです。
トレーニングのための任意の1枚に
トレードが表示されないのですが、何が原因なのか、コードの修正方法を教えていただけませんか?Urain さん、ありがとうございます。私はmqlのロジックに驚かされてばかりで、for(int i=1;を使おうとすると、スクリプトが簡略化されません - それをフォーマットする方法を教えていただけますか?私はまだ言語の論理を感じることができません、配列を移動する演算子を定義するにはどうしたらいいですか?
P.S.例題のスクリプトで、間違って配列を宣言してしまい、削除してしまいました。
価格の違い。その結果、逆に異なる指標結果が...。
#property indicator_buffers 2
#property indicator_color1 ブルー
#property indicator_color2 レッド
extern int n = 20;
extern int t3_period = 5;
extern double b = 0.618;
extern int int mBars = 300;
extern int Bars.Count = 0;
int i,t,c;
double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+
int init() {
SetIndexStyle(0, DRAW_LINE)を設定します。
SetIndexBuffer(0, Buf1)を設定します。
SetIndexStyle(1, DRAW_LINE)を設定します。
SetIndexBuffer(1, Buf2)を設定します。
return(0); }
//+------------------------------------------------------------------+
int start() {
int制限。
if (IndicatorCounted()<0) return(-1);
limit=Bars-IndicatorCounted()。
if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
for(int i=0; i<limit; i++)
{
b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b3); c4=(1+3*b+b3+3*b2); n1=t3_period;
if(n1<1) n1=1; n1=1+0.5*(n1-1); w1=2/(n1+1); w2=1-w1;
if(AcBars==0) AcBars=Bars-mBars;
for(c=AcBars; c<=Bars-1; c +++) { i=Bars-1-c; {.
if(Close[i]>Close[i+1]) { Ch_p[i]=Close[i]-Close[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; } {Close[i]-Close[i]-CF_p[i+1]; CF_n[i]=0
else { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=Close[i+1]-Close[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }} 。
for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; } ←クリックすると拡大します。
k_p=ch_p-cff_n; k_n=ch_n-cff_p;
A1=k_p; e1=w1*A1+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4です。
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; Buf1[i]=t3;
A2=k_n; e12=w1*A2+w2*e12; e22=w1*e12+w2*e22; e32=w1*e22+w2*e32; e42=w1*e32+w2*e42となります。
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32;
AcBars=AcBars+1; ch_p=0; ch_n=0; cff_p=0; cff_n=0; }.
}
return(0); }
更新されないエラーの場所を教えてください、履歴は正常でオンラインの方は
こんにちは。配列を宣言し、配列のインデックスを 移動させる演算子を設定しましたが、命令が出ません。何が問題なのか、教えてください。
OrderSendを 試すと、うまくいくのですが・・・。
MetaEditore標準のヘルパーは読まれましたか?そうでない場合は、全文をお読みください...
こんにちは。配列を宣言し、配列のインデックスを移動させる演算子を定義したのですが、命令が出ません。何が問題なのか、アドバイスをお願いします。
。 一番損失が大きいオープンポジションを 1つ見つけたいのですが。
要は、負けているポジションより利益の多いポジションを見つけて、カウンタークローズで決済する必要があるんです。
もしかしたら、どなたか経験のある方、あるいはそのような問題に直面したことのある方がいらっしゃるかもしれません。
OrderSendを試すと、うまくいくのですが・・・。
MetaEditore標準のヘルパーは読まれましたか?そうでない場合は、全部読んでください...
ヤンデックスも成長し、質問される年齢も幼稚になりました。センドが多いのですが、ポジションが開きません。