функция автоматического расчета размера партии? - страница 2

 
Это золотая вещь. Сэкономил мне несколько часов работы. Ты мужик!
 

Наслаждайтесь... но не лишайте себя уверенности, которая приходит с созданием собственного кода и, следовательно, точного знания того, как он работает. Использование уже существующего кода - хороший способ улучшить свои знания по принципу "подтянись на карачках", меня бы здесь не было, если бы у меня не было кода, который я использовал в качестве примера в начале своей карьеры, но не забудьте заставить себя научиться ловить рыбу. От этого есть польза во всем остальном, что вы делаете.

 

@ Phillip

Что вы думаете об этом?

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );

if(tradeVolume<MarketInfo(Symbol(),MODE_MINLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MINLOT);

if(tradeVolume>MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT);

res=OrderSend(Symbol(),OP_BUY,tradeVolume,Ask,3,Ask - 0.2,Ask + 0.4,"",MAGICID,0,Red);

 
Ricotter:

tradeVolume = AccountFreeMargin() * risk/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );


Не тестируя лично, чтобы подтвердить математику, но предполагая, что математика верна, это выглядит правильно при условии, что вы применяете это только к валютным парам, для которых встречная валюта также является номиналом счета.

Например, если ваш счет USD, то вы должны применять этот метод расчета объема торгов только к валютным парам с USD в качестве счетчика - EURUSD, GBPUSD и т.д.

В моих кодах этот тип валютной пары обозначен как "Тип 2".

Расчет будет ошибочным, если вы примените его к инструменту, у которого за основу взят номинал счета (например, USDJPY, если счет USD). И точно так же он будет ошибочным, если его применить к любым кроссам.

Покопайтесь в функции вызова SymboType() в включаемом файле "Analyze Currency Symbol", который был в моем другом сообщении, в прокомментированном разделе заголовка вроде как объясняется основа для различных типов символов и почему вам нужно вычислять капитал под риском и объем (лотность) по-разному в зависимости от типа символа.

Но если вы планируете торговать только парами типа EURUSD и GBPUSD, то ваш код выглядит хорошо!
 

Привет еще раз, Филипп... Вы можете вспомнить, что в одном из моих предыдущих сообщений я сказал: "Похоже, что у кода были некоторые проблемы с парами JPY. Это было решено?". Так вот, я думаю, что эта проблема снова возникла у меня. Я правильно (я почти уверен) добавил вашу процедуру в свой советник и установил MaxPercentEquityAtRisk= 1.0 (1 процент). Капитал моего демо-счета составляет около 2300 долларов США, поэтому я готов рисковать примерно 23 долларами на любой сделке. Мой советник использует одинаковые по размеру стоп-лоссы и цели прибыли - так что если я рискую 23 долларами на сделке, я рассчитываю на прибыль в 23 доллара. В любом случае, вчера вечером мой советник сгенерировал 2 сделки:

(1) BUY EUR/JPY, стоплосс 9.8 пунктов и цель прибыли 9.8 пунктов. Ваша программа рассчитала размер лота в 0.80 лота (слишком большой), и сделка принесла прибыль в 10 пунктов в размере $96.91.

(2) КУПИТЬ NZDJPY, стоплосс 16,3 пункта и цель прибыли 16,3 пункта. Ваша программа рассчитала размер лота в 0.28 лота, и сделка принесла убыток в размере -$56.56.


Мне кажется, что обе эти сделки должны были дать мне примерно $23 выигрыша или $23 проигрыша, учитывая, что я рискую только 1% от моего капитала в $2300, не так ли?


Спасибо!

Шон

 

Это может помочь Phillp - вот лог печати из вашего кода сразу после того, как он рассчитал размеры лотов для обоих ордеров, о которых я говорил выше:


05:14:56 EURJPY,H1: BUY - EURJPY Max EquityAtRisk = $21.99 and Max Lotsize = 0.8085
05:14:56 EURJPY,H1: BUY - EURJPY Current EquityAtRisk = $21.76 and Current Lotsize = 0.8
05:14:56 EURJPY,H1: BUY - EURJPY MarketInfo(MODE_STOPLEVEL) = 30.00000
05:14:56 LibOrderReliable EURJPY,H1: loaded successfully
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1:
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
05:14:56 LibOrderReliable EURJPY,H1: OrderSendReliable v3.1: Попытка BUY STOP 0.80000000 лотов @114.78700000 sl:114.68900000 tp:114.88500000



09:02:36 NZDJPY,H1: BUY - NZDJPY Max EquityAtRisk = $23.29 and Max Lotsize = 0.2814
09:02:36 NZDJPY,H1: BUY - NZDJPY Current EquityAtRisk = $23.18 and Current Lotsize = 0.28
09:02:36 NZDJPY,H1: BUY - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000
09:02:36 LibOrderReliable NZDJPY,H1: loaded successfully
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
09:02:36 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: Attempted BUY STOP 0.28000000 lots @64.29700000 sl:64.13400000 tp:64.46000000
09:02:37 LibOrderReliable NZDJPY,H1: open #155492665 buy stop 0.28 NZDJPY at 64.297 sl: 64.134 tp: 64.460 ok
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: Билет #155492665: Успешно размещен ордер BUY STOP, подробности далее.
09:02:37 LibOrderReliable NZDJPY,H1: #155492665 2010.11.04 13:02 buy stop 0.28 NZDJPY 64.297 64.134 64.460 64.197 0.00 0.00 0.00 NZDJPY73650016 73650016
09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

09:02:37 LibOrderReliable NZDJPY,H1: OrderSendReliable v3.1:


... похоже, что он вычисляет Max EquityAtRisk цифру нормально... но эти лоты приводят к прибыли/убыткам намного больше, чем мой желаемый риск в 1% от капитала.


Спасибо

Шон

 

Какой у вас брокер?

На FXDD, когда я ввожу эти стоп-приказы, я получаю размер лота 0.15 для EURJPY (@25.66 EaR).

2010.11.04 16:05:39 Assisted_Order_Script_2010.11.01 EURJPY,Daily: open #95896902 buy stop 0.15 EURJPY at 114.827 sl: 114.689 tp: 114.885 ok<br / translate="no"> 2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: attempted OP_BUYSTOP 0.15000000 lots @114.82700000 sl:114.68900000 tp:114.88500000
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: Текущий EquityAtRisk = $25.66 и Текущий размер лота = 0.15 и Цель прибыли = $10.78 для соотношения прибыли и убытков 0.4:1
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Daily: Максимально допустимый EquityAtRisk = $25.84 и Максимальный рассчитанный размер лота = 0.1511
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Ежедневные входы: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

На IBFX я получаю размер лота 0,16 с EaR $26,77 (больший начальный капитал на счете).

2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: open #94468219 buy stop 0.16 EURJPY at 114.824 sl: 114.689 tp: 114.885 ok
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: attempted OP_BUYSTOP 0.16000000 lots @114.82400000 sl:114.68900000 tp:114.88500000
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: Текущий EquityAtRisk = $26.77 и текущий размер лота = 0.16 и цель прибыли = $12.10 для соотношения прибыли и убытков 0.5:1
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4: Максимально допустимый EquityAtRisk = $27.19 и Максимальный рассчитанный размер лота = 0.1625
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4 входы: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

С NZDJPY я получаю лот размером 0.09 лота и EaR 24.53 на IBFX:

2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: open #94468343 buy stop 0.09 NZDJPY at 64.354 sl: 64.134 tp: 64.460 ok
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: attempted OP_BUYSTOP 0.09000000 lots @64.35400000 sl:64.13400000 tp:64.46000000
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: Текущий EquityAtRisk = $24.53 и текущий размер лота = 0.09 и цель прибыли = $11.82 для соотношения прибыли и убытков 0.5:1
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: Максимально допустимый EquityAtRisk = $27.19 и Максимальный рассчитанный размер лота = 0.0998
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 входы: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

Я проверяю совместимость с девятью брокерами, эти коды работают на Alpari(US), CitiFXPro, CMS, Forex.com (Gain Capital), FXCM, FXDD, IBFX, MIG Bank и ODL.

Эти брокеры различаются настолько, что до сих пор я был удовлетворен тем, что коды не зависят от брокера, поскольку они ловко справляются с различиями в параметрах брокерского рынка этих брокеров.

Но мы предполагаем, что ваша реализация кода не сломана, так что давайте сначала устраним это. Попробуйте приложенный скрипт, перетащите его на EURJPY и введите параметры для вашего BUY STOP, как я сделал выше, и дайте мне знать о результатах. (используйте только на демо-счете )

 

Спасибо, Филипп... Я использую демо-версию Alpari UK, капитал счета 2272.85 долларов США. Хорошо, я добавил скрипт на часовой график EURJPY (точно так же, как использует мой советник). Он ничего не сделал и не выставил отложенный ордер, поэтому я проверил вкладку "Эксперты" на наличие сообщений об ошибках... вот что там написано:


2010.11.04 20:39:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: удален
2010.11.04 20:38:38 Assisted_Order_Script_2010.11.01 EURJPY,H1: успешно загружен
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: удален
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: нулевое деление
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max allowed EquityAtRisk = $22.73 и Max computed Lotsize = 0
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;


Спасибо!

Шон

 

Примечание: только что я снова попробовал скрипт Phillip, те же числа, но установил MinLotOverride в true... он запустил немедленный MARKET ордер (хотя моя цена покупки была 115.827, а рынок был только на 114.945. Размер лота = 0.01 и никакого стоплосса или целевого ордера на прибыль - они оба были 0.0000.

Спасибо

Шон

 

Просто чтобы подтвердить, деноминация вашего счета - USD, правильно?

Я сейчас скачиваю Alpari UK, чтобы проверить его.

Открытие ордера по рынку вместо бай стопа полностью контролируется рутиной orderreliable... очень странно. Придется исследовать и это.

Одно, что привлекло мое внимание, это вот это уведомление:
"Кредитное плечо на демо-счете автоматически устанавливается на максимальное плечо 1:500."
.
Не то чтобы кредитное плечо должно влиять на расчет размера лота, оно должно влиять только на расчеты freemargin IIRC.

Edit: nevermind, I see the platform actually does not default to this, it's 1:100 max leverage

Причина обращения: