Все работает нормально, если я устанавливаю фиксированный размер лота, то все в порядке, но я хочу динамический размер лота. Поэтому я придумал вышеприведенный скрипт, но он не работает, и я не знаю, в чем проблема. @raptor Я хочу использовать $100 из $1000 баланса, что, как я понимаю, является 0.1 лотом, так как мое кредитное плечо 1:100, но я хочу, чтобы это было динамично, так что если система получает прибыль и баланс становится выше, скажем, новый баланс становится $2000, я хочу, чтобы теперь она открывала сделки с $200 (0.2 лота), соблюдая процент, который я установил, т.е. 10%, 20% или любой из баланса/маржи, которую я установил. @ onewithzachy ordersend в порядке, поскольку он работает, если я устанавливаю фиксированный размер лота, т.е.
double lots=0.1;
, но когда я пытаюсь динамизировать его, как показано ниже, он говорит, что размер лота неправильный.Мой счет микро и поддерживает минимальный лот 0.01.
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,...)
}
Пожалуйста, прочитайте комментарии, которые я включил в код, чтобы лучше понять.
ВЫ ХОТИТЕ ПОТЕРЯТЬ 10% или ОТКРЫТЬ ПОЗИЦИЮ С 10% ? (ответ: первое!)
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% так же, как кто-то может внести $1000 на свой счет и открывать позиции с 0.1 лотом (10%, если кредитное плечо 1:100).
onewithzachy Вы правы, я изменил его на нижеприведенный и он сработал, но тест стратегии получился хуже, я думаю, лучше использовать фиксированные лоты.
jameslarry: Все работает нормально, если я устанавливаю фиксированный размер лота, то все в порядке, но я хочу динамический размер лота. Поэтому я придумал вышеприведенный скрипт, но он не работает, и я не знаю, в чем проблема. @raptor Я хочу использовать $100 из $1000 баланса, что, как я понимаю, является 0.1 лотом, так как мое кредитное плечо 1:100, но я хочу, чтобы это было динамично, так что если система получает прибыль и баланс становится выше, скажем, новый баланс становится $2000, я хочу, чтобы теперь она открывала сделки с $200 (0.2 лота), соблюдая процент, который я установил, т.е. 10%, 20% или любой из баланса/маржи, которую я установил. @ onewithzachy ordersend в порядке, поскольку он работает, если я устанавливаю фиксированный размер лота,но когда я пытаюсь динамизировать его, как показано ниже, он говорит, что неправильный размер лота. Мой счет микро и поддерживает минимальный лот 0.01. Также это возвращает ту же ошибку, хотя это даже проще Пожалуйста, прочитайте комментарии, которые я включил в код, чтобы лучше понять.
Я думаю, что у вас большое непонимание того, как все работает. ... Маржинальное требование и риск - это не одно и то же... Если вы создаете размер позиции на основе маржинального требования в $100 и ваша сделка проигрывает, вы можете потерять гораздо больше или меньше, чем ваши $100... Маржинальное требование меняется в зависимости от кредитного плеча... Риск - нет.
Нет, подождите, это действительно добавило немного турбо, я неправильно его протестировал. Было бы здорово, если бы я мог рассчитать это по одной формуле, а не с помощью тонны операторов if. Возможно ли вывести формулу?
jameslarry: Нет, подождите, это действительно добавило немного турбо, я неправильно его протестировал. Было бы здорово, если бы я мог рассчитать это по одной формуле, а не с помощью тонны операторов if. Возможно ли вывести формулу?
Да, постройте точки на графике, и тогда вы сможете составить линейное уравнение в виде y = mx + c
Сделать что... Вы не объяснили, что вы хотите сделать... несмотря на то, что вам задавали конкретные вопросы... Если вы игнорируете вопросы, которые задаются для того, чтобы вам помогли, то вас очень быстро проигнорируют.
НЕ ДЕЛАЙТЕ ЭТОГО С РЕАЛЬНЫМИ ДЕНЬГАМИ.
ВЫ ХОТИТЕ ПОТЕРЯТЬ 10% или ОТКРЫТЬ ПОЗИЦИЮ С 10% ? (ответ: первое!)
Я хочу открывать позиции с 10% так же, как кто-то может внести $1000 на свой счет и открывать позиции с 0.1 лотом (10%, если кредитное плечо 1:100).
onewithzachy Вы правы, я изменил его на нижеприведенный и он сработал, но тест стратегии получился хуже, я думаю, лучше использовать фиксированные лоты.
Все работает нормально, если я устанавливаю фиксированный размер лота, то все в порядке, но я хочу динамический размер лота. Поэтому я придумал вышеприведенный скрипт, но он не работает, и я не знаю, в чем проблема. @raptor Я хочу использовать $100 из $1000 баланса, что, как я понимаю, является 0.1 лотом, так как мое кредитное плечо 1:100, но я хочу, чтобы это было динамично, так что если система получает прибыль и баланс становится выше, скажем, новый баланс становится $2000, я хочу, чтобы теперь она открывала сделки с $200 (0.2 лота), соблюдая процент, который я установил, т.е. 10%, 20% или любой из баланса/маржи, которую я установил. @ onewithzachy ordersend в порядке, поскольку он работает, если я устанавливаю фиксированный размер лота,но когда я пытаюсь динамизировать его, как показано ниже, он говорит, что неправильный размер лота. Мой счет микро и поддерживает минимальный лот 0.01. Также это возвращает ту же ошибку, хотя это даже проще Пожалуйста, прочитайте комментарии, которые я включил в код, чтобы лучше понять.
Нет, подождите, это действительно добавило немного турбо, я неправильно его протестировал. Было бы здорово, если бы я мог рассчитать это по одной формуле, а не с помощью тонны операторов if. Возможно ли вывести формулу?
Какой способ самый безопасный?