Наслаждайтесь... но не лишайте себя уверенности, которая приходит с созданием собственного кода и, следовательно, точного знания того, как он работает. Использование уже существующего кода - хороший способ улучшить свои знания по принципу "подтянись на карачках", меня бы здесь не было, если бы у меня не было кода, который я использовал в качестве примера в начале своей карьеры, но не забудьте заставить себя научиться ловить рыбу. От этого есть польза во всем остальном, что вы делаете.
Не тестируя лично, чтобы подтвердить математику, но предполагая, что математика верна, это выглядит правильно при условии, что вы применяете это только к валютным парам, для которых встречная валюта также является номиналом счета.
Например, если ваш счет 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, не так ли?
... похоже, что он вычисляет 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 (точно так же, как использует мой советник). Он ничего не сделал и не выставил отложенный ордер, поэтому я проверил вкладку "Эксперты" на наличие сообщений об ошибках... вот что там написано:
Примечание: только что я снова попробовал скрипт 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
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Наслаждайтесь... но не лишайте себя уверенности, которая приходит с созданием собственного кода и, следовательно, точного знания того, как он работает. Использование уже существующего кода - хороший способ улучшить свои знания по принципу "подтянись на карачках", меня бы здесь не было, если бы у меня не было кода, который я использовал в качестве примера в начале своей карьеры, но не забудьте заставить себя научиться ловить рыбу. От этого есть польза во всем остальном, что вы делаете.
@ 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);
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: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: 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: 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