externint LotPercentage=10; // use 10% of balance as lot sizeint start()
{
double LotInBalance=(LotPercentage/100)*AccountBalance(); // find the amount that is 10% of balance lets assume its $1000double LotUnits=LotBalance*AccountLeverage(); // multiply this 10% balance($100) by leverage to get lot unitsdouble lots=NormalizeDouble((LotUnits/100000),2); // expected to return 0.1/* divide this lot units by 100,000(standard lot size units) and normalize to 2 decimal places to get something like 0.1 if account balance is say $1000 for use in ordersend()*/
...
return0;
}
また、これはさらに単純ながら同じエラーを返します。
double lots;
double Balance=AccountBalance();
if(Balance<=500){lots=0.1;} // If my account has $500 or less the lot will be 0.1if(Balance<1500&&Balance>1000){lots=0.3;}
if(Balance<2500&&Balance>2000){lots=0.5;}
if(Balance<3500&&Balance>3000){lots=0.7;}
if(Balance<4500&&Balance>4000){lots=0.9;}
if(Balance<5500&&Balance>5000){lots=1.1;}
if(Balance<6500&&Balance>6000){lots=1.3;}
if(Balance<7500&&Balance>7000){lots=1.5;}
if(Balance<8500&&Balance>8000){lots=1.7;}
if(Balance<9500&&Balance>9000){lots=1.9;}
if(Balance>10000){lots=2;} // If account balance if over 10000 lot is 2if(/*opening criteria met*/){
OrderSend(Symbol(),OP_BUY,lots,...)
}
double lots; // <<== value is zerodouble Balance=AccountBalance();
if(Balance<=500){lots=0.1;} // What the lots if Balance > 500 && <= 1000 ?if(Balance<1500&&Balance>1000){lots=0.3;} // read this carefully : if balance bigger than but not equal with 1000// AND balance also smaller but not equal than 1500.// Question : what's the lot if balance equal with 1000 and 1500 ?
本当のお金でやらないでください。
10%を失うか、10%でポジションを開くか?(答え: 最初の1つ!)
口座に1000ドル入金して0.1ロット(レバレッジ1:100なら10%)でポジションを持つのと同じように、10%でポジションを持ちたいのですが、どうすればいいですか?
onewithzachy さんのおっしゃる通り、以下のように修正したらうまくいったのですが、ストラテジーテストが うまくいかなかったので、固定ロットを使うのがベストだと思います。
固定ロットサイズを設定すればすべてうまくいきますが、私は動的ロットサイズが欲しいのです。そこで、上記のスクリプトを考えてみたのですが、うまくいきませんし、問題点もわかりません。@raptor 私は1000ドルの残高のうち100ドルを使いたいのですが、私のレバレッジは1:100なので、0.1ロットだと理解しています。@ onewithzachyordersend は、固定ロットサイズを設定した場合は動作するので問題ありませんが、以下のようにダイナミックに設定しようとすると、間違ったロットサイズと 表示されます。私の口座はマイクロで、最小0.01ロットをサポートしています。 また、これはさらに単純でありながら同じエラーを返します。 理解を深めるために私がコードに含めたコメントを読んでください。
いや待てよ、ターボが追加されたのだが、私は間違ってテストしていた。何度もif文を書くより、1つの計算式で計算できればいいのですが。 計算式を導き出すことは可能でしょうか?
最も安全な方法はどれですか?