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

 
Alexey Viktorov:
それは認めるよ。しかし、これが「口座履歴」ウィンドウではなく「取引」ウィンドウであることを理解するには、かなりの労力が必要です。不注意と怠惰で、頭の筋肉に負担をかけずに、「アカウント履歴」ウィンドウのせいだと思った。

そうなるんです。許せる。

 

5桁を読むのが不便なので、チャートの標準のビッドラインを無効化し、上隅の出力を4桁にしましたが、時々価格が下がるので、これまた不便です :-)

Labelオブジェクトを価格に合わせて動かしたいのですが、右の価格タグOBJ_ARROW_RIGHT_PRICEは 枠があるので嫌なんです。

しかし、なぜか入札価格による位置決めがうまくいかず、ラベルが左上に表示される


//+------------------------------------------------------------------+
//|                                              CandleTimeStationary|
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property strict

//---- input parameters
input color Clock_Color = clrCrimson;

string objname="Bid";


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
        ObjectCreate(0, objname, OBJ_LABEL,0, 0, 0);
        
    

        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) { ObjectDelete(0, objname); } 

//+------------------------------------------------------------------+
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& spreads[])
{

        ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));     
        ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(SymbolInfoDouble(Symbol(), SYMBOL_BID), _Digits-1));
        ObjectSetInteger(0, objname, OBJPROP_FONTSIZE, 12);
        ObjectSetInteger(0, objname, OBJPROP_COLOR, Clock_Color);
        ObjectSetString(0, objname, OBJPROP_FONT, "Verdana");
        
        return(rates_total);
}
 
psyman:

5桁を読むのが不便なので、チャートの標準のビッドラインを無効化し、上隅の出力を4桁にしましたが、時々価格が下がるので、これまた不便です :-)

Labelオブジェクトを価格に合わせて動かしたいのですが、右の価格タグOBJ_ARROW_RIGHT_PRICEは 枠があるので嫌なんです。

しかし、なぜか入札価格による位置決めがうまくいかず、ラベルが左上に表示される


OBJ_LABEL の 場合、位置情報はピクセル単位で指定する。

ChartTimePriceToXY(0, 0, TimeCurrent(), Bid, x, y); // x, y добавьте в переменные, тип int
ObjectSetInteger(0, objname, OBJPROP_YDISTANCE, ulong(y)); //если на эту строчку будет предупреждение в компиляторе то, значит ulong ненужен
//ObjectSetDouble(0, objname, OBJPROP_PRICE, SymbolInfoDouble(Symbol(), SYMBOL_BID));
ObjectSetString(0, objname, OBJPROP_TEXT, DoubleToString(Bid, _Digits-1));
 
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

double Znomer()
{
zn=0; // z-число
psd=0; // кол. положительных сделок
usd=0; // количество отрицательных сделок 
ww=0; // боол переменная 
nn=0; // боол переменная
C=0; // C = количество чередований между отрицательными и положительными сделками
index=OrdersHistoryTotal(); 
if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
if(index<30) return(1); // берём не менее 30
count=OrdersHistoryTotal(); // считаем от скольки 
prom=count-index; // выделяем только последние сделки
if (prom<0) prom=0; // исключаем ошибки

for( i=count;i>prom;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)== true)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{// далее магия
pribul=OrderProfit(); 
if (ww==0&&pribul>1){C++;ww=1;nn=0;}// подсчитываем смену тенденции
if (nn==0&&pribul<1){C++;ww=0;nn=1;}// подсчитываем смену тенденции 
if (pribul>1){psd++;}//прибыльные сделки
if (pribul<1){usd++;}// убыточные сделки

}
}
}
/*/*
Величина Z = (A * (C — 0.5) — B)/ ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
*/
zn = (index*(C-0.5)-(2*psd*usd))/
((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*((((2*psd*usd)*((2*psd*usd)-C))/
(C-1))*0.5));



return(zn);
}

私は、アカウントを失う傾向を計算する簡単なコードを書くことにしました。そのために、簡単なZアカウントの計算式を、mq4コードに転送してみました。
すべて正しいように見えますが、Printを使って簡単な出力を実行すると、EAが一度に動作しません。コンパイル時にエラーは出ないのですが。
もう、シンプルなコードで頭を悩ませています。

ご協力ありがとうございます。

 
Aliaksei Karalkou:

アカウントを失う傾向を計算する簡単なコードを書いてみることにした。そのために、Z-accountの簡単な数式を取り出し、mq4コードで使ってみました。
すべて正しいように見えますが、Printを使って簡単な出力を実行すると、EAが一度に動作しません。コンパイル時にエラーは出ないのですが。
もう、シンプルなコードで頭を悩ませています。

ご協力ありがとうございます。

EAの労働許可証を確認する。また、プリント出力のどこを?このコード片は何かを返さなければなりません。もしエラーがなければ、問題はこのコード片の外側にあります。ただし、このブロックでは0による除算が発生する可能性があります。

 
Ilya Prozumentov:

OBJ_LABEL の 場合、位置情報はピクセル単位で指定する。

Ilyaさん、ありがとうございます、うまくいきました。

次の段階、つまりウィンドウのサイズ変更を考慮するときだけ、コンパイラはデータ型の変換に関する警告を出します。

int width = ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);

タイプ変換によるデータ損失の可能性 4digit+.mq5 36 14


この関数は int 型を返しますが。


 
psyman:

Ilyaさん、ありがとうございます、うまくいきました。

次の段階、つまりウィンドウのサイズ変更を考慮するときだけ、コンパイラはデータ型の変換に関する警告を出します。

タイプ変換によるデータ損失の可能性 4digit+.mq5 36 14


この関数は int 型を返しますが。


この関数は,long 型を返す。
 
novichok2018:

そうなんですか!それと、注文が締め切られたことはどこに書いてあるんですか?

取引」ウィンドウで緑色のTPは、現在の 価格がTPから-100pips以内、より正確に言えば、100pips以内であることを意味します。

ありがとうございました。
 
Artyom Trishkin:
この関数は,long 型を返す。

このような場合、変数の型を変えるか、そのままにしておくか、どうしたらよいのでしょうか。

 
psyman:

このような場合、変数の種類を変えるか、そのままにしておくか、どちらがよいのでしょうか。

int width = (int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);