Хилп! Хилп! - страница 3

 
Все работает нормально, если я устанавливаю фиксированный размер лота, то все в порядке, но я хочу динамический размер лота. Поэтому я придумал вышеприведенный скрипт, но он не работает, и я не знаю, в чем проблема. @raptor Я хочу использовать $100 из $1000 баланса, что, как я понимаю, является 0.1 лотом, так как мое кредитное плечо 1:100, но я хочу, чтобы это было динамично, так что если система получает прибыль и баланс становится выше, скажем, новый баланс становится $2000, я хочу, чтобы теперь она открывала сделки с $200 (0.2 лота), соблюдая процент, который я установил, т.е. 10%, 20% или любой из баланса/маржи, которую я установил. @ onewithzachy ordersend в порядке, поскольку он работает, если я устанавливаю фиксированный размер лота, т.е.
double lots=0.1;
, но когда я пытаюсь динамизировать его, как показано ниже, он говорит, что размер лота неправильный.Мой счет микро и поддерживает минимальный лот 0.01.
extern int LotPercentage=10; // use 10% of balance as lot size

int start()
{

double LotInBalance=(LotPercentage/100)*AccountBalance(); // find the amount that is 10% of balance lets assume its $1000
double LotUnits=LotBalance*AccountLeverage(); // multiply this 10% balance($100) by leverage to get lot units
double 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()*/

...

return 0;

}
Также эта ошибка возвращается, хотя она еще проще
double lots;
double Balance=AccountBalance();
if(Balance<=500){lots=0.1;}                // If my account has $500 or less the lot will be 0.1
if(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 2

if(/*opening criteria met*/){
OrderSend(Symbol(),OP_BUY,lots,...)
}
Пожалуйста, прочитайте комментарии, которые я включил в код, чтобы лучше понять.
 

НЕ ДЕЛАЙТЕ ЭТОГО С РЕАЛЬНЫМИ ДЕНЬГАМИ.

ВЫ ХОТИТЕ ПОТЕРЯТЬ 10% или ОТКРЫТЬ ПОЗИЦИЮ С 10% ? (ответ: первое!)

double lots;                               // <<== value is zero
double 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% так же, как кто-то может внести $1000 на свой счет и открывать позиции с 0.1 лотом (10%, если кредитное плечо 1:100).

onewithzachy Вы правы, я изменил его на нижеприведенный и он сработал, но тест стратегии получился хуже, я думаю, лучше использовать фиксированные лоты.

double Balance=AccountBalance();
if(Balance<=500||(Balance>500&&Balance<1000)){lots=0.1;}
if((Balance<=1500&&Balance>=1000)||(Balance>1500&&Balance<2000)){lots=0.3;}
if((Balance<=2500&&Balance>=2000)||(Balance>2500&&Balance<3000)){lots=0.5;}
if((Balance<=3500&&Balance>=3000)||(Balance>3500&&Balance<4000)){lots=0.7;}
if((Balance<=4500&&Balance>=4000)||(Balance>4500&&Balance<5000)){lots=0.9;}
if((Balance<=5500&&Balance>=5000)||(Balance>5500&&Balance<6000)){lots=1.1;}
if((Balance<=6500&&Balance>=6000)||(Balance>6500&&Balance<7000)){lots=1.3;}
if((Balance<=7500&&Balance>=7000)||(Balance>7500&&Balance<8000)){lots=1.5;}
if((Balance<=8500&&Balance>=8000)||(Balance>8500&&Balance<9000)){lots=1.7;}
if((Balance<=9500&&Balance>=9000)||(Balance>9500&&Balance<10000)){lots=1.9;}
if(Balance>10000){lots=2;} 
 
jameslarry:
Все работает нормально, если я устанавливаю фиксированный размер лота, то все в порядке, но я хочу динамический размер лота. Поэтому я придумал вышеприведенный скрипт, но он не работает, и я не знаю, в чем проблема. @raptor Я хочу использовать $100 из $1000 баланса, что, как я понимаю, является 0.1 лотом, так как мое кредитное плечо 1:100, но я хочу, чтобы это было динамично, так что если система получает прибыль и баланс становится выше, скажем, новый баланс становится $2000, я хочу, чтобы теперь она открывала сделки с $200 (0.2 лота), соблюдая процент, который я установил, т.е. 10%, 20% или любой из баланса/маржи, которую я установил. @ onewithzachy ordersend в порядке, поскольку он работает, если я устанавливаю фиксированный размер лота,но когда я пытаюсь динамизировать его, как показано ниже, он говорит, что неправильный размер лота. Мой счет микро и поддерживает минимальный лот 0.01. Также это возвращает ту же ошибку, хотя это даже проще Пожалуйста, прочитайте комментарии, которые я включил в код, чтобы лучше понять.
Я думаю, что у вас большое непонимание того, как все работает. ... Маржинальное требование и риск - это не одно и то же... Если вы создаете размер позиции на основе маржинального требования в $100 и ваша сделка проигрывает, вы можете потерять гораздо больше или меньше, чем ваши $100... Маржинальное требование меняется в зависимости от кредитного плеча... Риск - нет.
 
Нет, подождите, это действительно добавило немного турбо, я неправильно его протестировал. Было бы здорово, если бы я мог рассчитать это по одной формуле, а не с помощью тонны операторов if. Возможно ли вывести формулу?
 
рискованно в некоторых ситуациях, например, в 2012 году мы бы проиграли с турбо, но выиграли без него.
 
Какой способ самый безопасный?
 
jameslarry:
Нет, подождите, это действительно добавило немного турбо, я неправильно его протестировал. Было бы здорово, если бы я мог рассчитать это по одной формуле, а не с помощью тонны операторов if. Возможно ли вывести формулу?
Да, постройте точки на графике, и тогда вы сможете составить линейное уравнение в виде y = mx + c
 
jameslarry:
Какой способ самый безопасный?
Сделать что... Вы не объяснили, что вы хотите сделать... несмотря на то, что вам задавали конкретные вопросы... Если вы игнорируете вопросы, которые задаются для того, чтобы вам помогли, то вас очень быстро проигнорируют.
Причина обращения: