// ==========================================================================// ------------ Функция рассчёта величины лота для открытия позиции ---------// Если лот превышает возможный для открытия позы, то он корректируется // ==========================================================================double CorrectLots(double lt)
{
double ltcorr;
double pnt = MarketInfo(Symbol(),MODE_POINT);
double mspr = MarketInfo(Symbol(),MODE_SPREAD);
double dig = MarketInfo(Symbol(),MODE_DIGITS);
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
double StpLot = MarketInfo(Symbol(),MODE_LOTSTEP);
double OneLot = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig); // Свободные средства, разрешенные к торговле
lt=MathAbs(lt);
ltcorr=lt; // Зададим начальное значением ltcorr равным значению ltif (lt>=MaxLot) ltcorr=MaxLot; // Проверим превышение допустимых ...if (lt<=MinLot) ltcorr=MinLot; // ... значений лотаdouble Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позыif (Money<TradeMrg) // Если свободных средств больше, чем цена позиции -
{
return(ltcorr); // ... возвращаем неизменённый лот
}
elseif (Money>=TradeMrg) // Если цена позиции равна или больше, чем есть свободных средств, то ...
{
ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot); // ... рассчитаем допустимый лотdouble MoneyCorr=ltcorr*OneLot+mspr*pnt;
Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
" Стоимость позы до корректировки = ",Money,
" Стоимость позы после корректировки = ",MoneyCorr
);
return(ltcorr); // ... и вернём его значение
}
Print("Func CorrectLots: лот вернули без изменений");
return(ltcorr); // Возврат изначального лота в непредусмотренных случаях с сообщением
}
バランス 600-1199 ロット 0.1
バランス 1200-1799 ロット 0.2
バランス 1800-2399 ロット 0.3 等
EAでどのように組織化するか?ありがとうございます。
バランス 600-1199 ロット 0.1
バランス 1200-1799 ロット 0.2
バランス 1800-2399 ロット 0.3 等
EAでどのように組織化するか?ありがとうございます。
call: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point,「私の注文#」,magic,0,CLR_NONE)。
呼び出し:ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "My order #", magic,0,CLR_NONE);
同時に、天秤は雲の中、株式は大引けかもしれません。そのため、開口部よりも敷地面積が大きく見えてしまい、全体の構造がオーバーフローしてしまうことも...。
開店前にロットを修正するのがベターです。
そのための関数を作ってみました。Viktor(Vinin)によって少し修正されましたが、試してみてください。
行列の中に。
...自由証拠金を4で割って、その4分の1だけを取引対象としています。
4で区切ることを削除して、好きなだけ入れてもいいし、全余白を使ってもいい。
しかし、この機能では、許容されるロットサイズより大きなロットサイズを使用することはできません。
同時に、バランスは雲の中、エクイティは大きなドローダウンの中にあるのかもしれません。敬遠されると、開口部よりも敷地面積が大きく見えてしまい、全体の構成がオーバーしてしまうことも......。
どうしてこんなに悲しいんだろう...。
私の関数の最後のreturn()は、金融商品の利用可能な最小ロットを提供します。 大きなレバレッジでセント口座である場合、バランスが600未満であるとき、Expert Advisorはもう少し時間を取引するかもしれません:)
SZZY:問題が具体的で、質問者に方向性を示すのがブランチです。
どうしてこんなに悲しいのだろう...
私の関数の最後のreturn()は、金融商品のための利用可能な最小ロットを提供します。 大きなレバレッジでセント口座である場合、バランスが600未満であるとき、Expert Advisorはもう少し時間を取引するかもしれません:)
SZZY:問題が具体的で、質問者に方向性を示すためのブランチ
以下は、私のバージョンでの機能です。
どうしてこんなに悲しいんだろう...。
私の関数の最後のreturn()は、金融商品の利用可能な最小ロットを提供します。 大きなレバレッジでセント口座である場合、バランスが600未満であるとき、Expert Advisorはもう少し時間を取引するかもしれません:)
SZZY:問題が具体的で、質問者に方向性を示すためのブランチ
あのね、イゴール、その人はあなたに質問をして、あなたは正しい答えを与えた、そしてあなたはそれを忘れることができる。しかし、天秤の上で踊るのはよくない。まさに天秤にかけ、実態を把握するために--今が貯め時なのです。そして私たちは、こうして......ああ......ああ......ああ......と...そして、注文の上位に大きなロットを...そして彼は倒れた...エクイティも、すでに
もうだから、バランスよりもエクイティに頼ったほうがいいと言ったのですが......。:)
ごきげんよう。
初心者に教えていただきたいのですが、MQL4で カスタムインジケーターを書いて、すべての通貨ペアを同時に扱えるようにすることは可能なのでしょうか?私の理解では、インジケータ・チャートの最大ライン数は8本ですが、私は1本だけ必要です。つまり、この行に対して、すべての通貨ペアの配列または変数を同時に取得することは可能でしょうか?
回答ありがとうございました。
I.e. すべての通貨ペアの配列または変数から処理されたこの行の配列を同時に取得することはできますか?
理論的には、何の障害もないと思います。もうひとつは、この配列を具体的に処理できるかどうかです。
理論的には、何の障害もないと思っています。もうひとつは、この配列を処理できるかどうかです。
ツールを作成する際に、プログラムコードですべての通貨ペアに対応するにはどうしたらよいですか?ツールの書き方の例に目を通しましたが、通貨ペアの参照はなく、特定の気配値チャートに連動しているものがデフォルトで処理されています。
今はExcelとVBAで全部やってしまうので、DDEサーバー経由で22通貨ペアの情報を取得し、VBAのコードを使うことで同時処理ということになりますが、まずExcelのチャートで分析を行うにはデータの履歴が溜まるまで2時間待たないといけないので不便です。そして、あるプログラムから別のプログラムへ飛び移るのは不便です。だから、どうやってMT4に全部移そうかと考えています。