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

 

Привет Филипп, Шон снова здесь. Я сделал небольшие изменения, которые мы обсуждали в прошлый раз (я все еще не внедрил вашу последнюю версию, однако), и проблемы с размерами лотов пар JPY все еще возникают. Я запустил советника вчера вечером, и он сгенерировал 3 сделки ( баланс моего счета 2550 долларов США, риск 1%, так что около 25 долларов риска на сделку):


(1) Продажа NZDJPY, 0.89 лота

(2) Продать AUDJPY, 0.23 лота

(3) Продать CADJPY, 0.94 лота.


Размер лота для сделки AUDJPY выглядит нормально, но не для двух других. У меня было несколько операторов Print, встроенных вокруг обращений к вашему материалу. Во-первых, вот код моего советника для этой части:


if(Bid > SellPrice && SellPrice != 0.00)
         {       
          CurrentOrderType=OP_SELL;
          CurrentStopLossPrice= FinalSellStopPrice;
          CurrentEquityAtRisk=(MaxPercentEquityAtRisk/100.0)*AccountBalance();
          CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "AccountBalance = ", DoubleToStr(AccountBalance(),2), " Max EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Max Lotsize = ",DoubleToStr(CurrentLotSize,4));
          CurrentLotSize=NormalizeLotSize(CurrentLotSize);
          Print("SELL - ", Symbol(), "Normalized LotSize is now = ", DoubleToStr(CurrentLotSize,4));
          if(CurrentLotSize<MarketInfo(Symbol(),MODE_MINLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MINLOT);
          if(CurrentLotSize>MarketInfo(Symbol(),MODE_MAXLOT)) CurrentLotSize=MarketInfo(Symbol(),MODE_MAXLOT);
          CurrentEquityAtRisk=EquityAtRisk(CurrentLotSize,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);
          Print("SELL - ", Symbol(), "Current EquityAtRisk = $",DoubleToStr(CurrentEquityAtRisk,2)," and Current Lotsize = ",DoubleToStr(CurrentLotSize,4));
          Print("SELL - ", Symbol(), " MarketInfo(MODE_STOPLEVEL) = ",DoubleToStr(MarketInfo(Symbol(),MODE_STOPLEVEL),5));
          
          //Check free margin
          if (AccountFreeMargin() < (1000 * CurrentLotSize)) 
          {
             Print("We have no money. Free Margin = ", AccountFreeMargin());
             return(0);
          }
         
          Ticket=OrderSendReliable2Step(Symbol(),OP_SELLSTOP,CurrentLotSize,FinalSellPrice,Slippage,CurrentStopLossPrice,FinalSellProfTarg,Symbol()+DoubleToStr(MagicNumber,0),MagicNumber,0,Red);
          if(Ticket<=0) Print("Error = ",GetLastError());
          else 
          { 


А вот вывод операторов Print, взятых из журнала, для каждой из 3 сделок выше:


05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYAccountBalance = 2550.90 Max EquityAtRisk = $25.51 и Max Lotsize = 0.8988
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYNormalized LotSize is now = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPYCurrent EquityAtRisk = $25.26 and Current Lotsize = 0.8900
05:16:10 DelphiEA NZDJPY,H1: SELL - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000


05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYAccountBalance = 2550.90 Max EquityAtRisk = $25.51 и Max Lotsize = 0.2376
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYNormalized LotSize is now = 0.2300
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPYCurrent EquityAtRisk = $24.69 и Current Lotsize = 0.2300
05:16:56 DelphiEA AUDJPY,H1: SELL - AUDJPY MarketInfo(MODE_STOPLEVEL) = 50.00000


07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYAccountBalance = 2550.90 Max EquityAtRisk = $25.51 и Max Lotsize = 0.9408
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYNormalized LotSize теперь = 0.9400
07:13:53 DelphiEA CADJPY,H1: SELL - CADJPYCurrent EquityAtRisk = $25.49 и Current Lotsize = 0.9400

07:13:53 DelphiEA CADJPY,H1: SELL - CADJPY MarketInfo(MODE_STOPLEVEL) = 60.00000


Надеюсь, это поможет!

О, Филипп, еще одна вещь - я думаю, что нашел небольшую ошибку в OrderSendReliable2Step. Не знаете ли вы, кому я должен сообщить об этом?


Спасибо!

Шон

 
Ricotter:

Этот парень делает это с помощью истории файлов.

https://www.mql5.com/en/articles/1493

Поскольку вы здесь новичок, стоит упомянуть, что этого ограничения не существует в MT5 Tester. К ВАШЕМУ СВЕДЕНИЮ.

 
gordon:

Поскольку вы здесь новичок, стоит упомянуть, что этого ограничения нет в MT5 Tester. К ВАШЕМУ СВЕДЕНИЮ.

Спасибо за совет. Есть ли какие-либо причины, по которым я НЕ должен использовать MT5?

 
Ricotter:

Спасибо за совет. Есть ли какие-либо причины, по которым я НЕ должен использовать MT5?

Если вы хотите сразу торговать в реальном времени, то вам лучше придерживаться MT4, но если вы планируете учиться и делать демо-версии в течение нескольких месяцев перед переходом в реальное время, то вы можете рассмотреть этот вариант. Это новая платформа со многими улучшениями по сравнению с MT4, но она также намного сложнее и до сих пор не поддерживается многими брокерами. Вот хорошая информация -> http://www.100forexbrokers.com/mt5-metatrader5. Также, возможно, вы захотите заглянуть на сайт MQL5.com.
 
shawnh:

Привет Филипп, Шон снова здесь. Я сделал небольшие изменения, которые мы обсуждали в прошлый раз (однако я все еще не внедрил вашу последнюю версию), и проблемы с лотами пар JPY все еще возникают.

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

Я рекомендую перейти на более новый код. На данный момент вам нужно что-то изменить, поскольку то, что у вас есть сейчас, работает неправильно.

Я не знаю, кому вы должны сообщить об ошибках в отношении проблем с orderlib, извините.
 
1005phillip:

Шаг 1: Поместите все вложения файлов из этого сообщения в ваш путь include (...\experts\include\*.mqh).

Шаг 2: Добавьте следующее в верхнюю часть вашего эксперта, чтобы он имел доступ к функциям вызова, содержащимся во вложенных файлах.

Шаг 3: Чтобы рассчитать размер лота на основе бюджетной суммы капитала для риска, добавьте следующее

Предполагая, что вы определили MaxPercentEquityAtRisk где-то в вашем советнике как максимально допустимый размер капитала для риска полного убытка по сделке в случае срабатывания стопов, эта часть кода сначала определит максимальный размер лота на основе openprice и stoplossprice (не пунктов, а реальной рыночной цены, той же самой, что вы отправляете в своем ордере брокеру), а затем определит максимальный размер позиции, который брокер примет, не превышая ваш бюджетный риск капитала.

Шаг 4: Если вам нравится, когда результаты расчетов печатаются в журнале или добавляются к сделке в виде комментария к ордеру, вы можете добавить следующее

Шаг 5: Разместите свой ордер (используя метод ordersendreliable)

https://c.mql5.com/mql4/forum/2010/10/OrderReliable_2010.10.12.mqh


Привет 1005филлип,


Есть ли у вас версия 2 mqh (analyze..., и tradepositionmanage...), в которой нет импорта нижеуказанного? Это потому, что оба имеют этот импорт, и поэтому не допускается компилятором.

//#include <stderror.mqh>
//#include <stdlib.mqh>


... чтобы я не редактировал файлы и держал их в состоянии "только для чтения". Или я могу отредактировать их и удалить эти импорты?

 
jcadong5:

...чтобы я не редактировал файлы и держал их в состоянии "только для чтения". Или я могу отредактировать их и удалить эти импорты?


Давайте, редактируйте их по своему вкусу. Для меня дублирование не мешает компиляции, компилятор записывает в журнал заметку о дублировании, но это все, что он делает.
 
Спасибо.
 
1005phillip:
В вашем коде все "выглядит" нормально, но все равно не понятно, почему это происходит с вами.

Я рекомендую перейти на более новый код. На данный момент вам нужно что-то изменить, поскольку то, что у вас есть сейчас, работает неправильно.

Я не знаю, кому вы должны сообщить об ошибках в отношении проблем с orderlib, извините.


Привет, Филипп, снова здесь Шон. После установки вашей последней версии несколько недель назад, я рад сообщить, что теперь все выглядит хорошо, а рассчитанные размеры лотов выглядят просто замечательно. Видимо, мне просто нужна была последняя версия!


Еще раз спасибо за вашу помощь, вы хороший человек!


Ваше здоровье

Shawn

 

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

Вероятно, в течение недели или двух у меня будет обновленная версия, которая будет иметь некоторые функции отката для использования при бэктестинге в MT4 на кросс-валютныхпарах. Сейчас, если вы попытаетесь провести бэктест кросс-пары, используя мой код размера лота, ваш бэктест будет провален, потому что бэктестер не сможет получить доступ к рыночным ценам для требуемых пар счетчика и базы. (это не является проблемой в живом или форвардном тестировании, это просто ограничение бэктестера MT4).

Я опубликую код, когда перейду этот мост, возможно, вы или другие найдут его полезным.

Хороших выходных,
- Фил

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