Торговые отчеты MetaTrader 5 довольно тяжелы для восприятия. По этой причине с определенного момента разработчики добавили в Терминал более понятный режим просмотра закрытых позиций. Однако, это не
//+------------------------------------------------------------------+//| Lot_Size_Depending_On_Risk_And_SL.mq5 |//| Copyright 2023, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property script_show_inputsinputuint Risk=6; // Размер риска (> 0, но не более 100 %)inputuint Stop_Loss=1000; // Размер стоп-лосса (> 0, но не более 4294967295)//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+double Lot_Size_Depending_On_Risk_And_SL()
{
//--- блок проверки входных параметров на корректностьif(Risk==0 || Risk>100 || Stop_Loss==0)
{
Print("<===== Введены не корректные размеры риска и/или стоп-лосса! =====>");
return(0.0);
}
//--- блок определения размера лотаdouble trading_account_currency=SymbolInfoDouble(_Symbol,SYMBOL_POINT)*
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
double lot=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/(Stop_Loss*trading_account_currency);
//--- блок проверки размера лота на минимум и максимум от возможногоdouble min_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
double max_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lot<min_volume)
lot=min_volume;
if(lot>max_volume)
lot=max_volume;
//--- блок расчёта минимального шага изменения объёма необходимого для заключения сделкиdouble step_volume=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(lot/step_volume);
if(MathAbs(ratio*step_volume-lot)>0.0000001)
lot=ratio*step_volume;
return(lot);
}
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---Print(DoubleToString(Lot_Size_Depending_On_Risk_And_SL(),2));
}
//+------------------------------------------------------------------+
除算器のゼロを確認せずに何度も除算。爆発的。
アルチョム、ありがとう!必ずチェックを加えるよ。
ありがとう、ウラジミール。
爆発的だ。
十分だ。
fxsaber さん、もし読んでいたら、返信をお願いします。
PositionID は tst ファイルに保存されています。多分、tst->Virtualに変換するのが理にかなっていて、そうすればMT4スタイルでtstを扱うことができます。以下はそのような変換の例 です。
オブジェクトからバックテスト履歴を抽出することもできます。その方がライブラリが 理解しやすい。
ZЫ 私はこのスレッドを購読していないので、見られないかもしれません。
ダニ1匹あたりのコストを必ず考慮すること。
皆さん、おはようございます!
コードを書く時間がない。フォーラムのメンバーからのヒントを考慮して、このバージョンのスクリプトを作りました:
ありがとう、ウラジミール。
こんにちは!
私のロボットを改良して、1台のコンピューターでしか機能しないようにする方法を教えていただけませんか?
(コピーから守るため)
アレクサンダー
こんにちは!
私のロボットを1台のコンピュータだけで機能するように改良する方法を教えていただけませんか?
(コピーされないようにするためです)
アレクサンダー
最も簡単な方法です。
OnInit 関数に 2 行のコードを挿入します。
口座番号の代わりに、Expert Advisorを提供する人の口座を指定し、コンパイルしてex5ファイルのみを提供します。
最も簡単な選択肢だ。
OnInit関数に2行のコードを挿入する。
口座番号の代わりにExpert Advisorを提供する人の口座を指定し、コンパイルしてex5ファイルのみを提供します。
ありがとうございました!
最も簡単な選択肢だ。
OnInit関数に2行のコードを挿入する。
口座番号の代わりに、Expert Advisorを提供する人の口座を指定し、コンパイルしてex5ファイルだけを渡します。
クライアントがターミナルのスイッチを入れると、Expert Advisor がクラッシュする :-))
というのも、ACCOUNT_LOGIN=0 という状況があるからです。
クライアントが端末のスイッチを入れると、Expert Advisorがクラッシュする:-)
というのも、ACCOUNT_LOGIN=0 のとき
信頼できる高い品質を必要とするなら、それはフリーランスのためのものです。
奇妙だ。ターミナルの "設定 -> チャート "で最大5000バーを設定した。ターミナルをリロードすると、シンボルのあるタブにカーソルを置くと、5000本と表示される。
しかし、このコードは
6201バーの情報が表示されます。
これは正しいのでしょうか?私はrates_totalにも 5000を期待していました。