Фиксированный процент от депозита - страница 3

 
Igor Knyazkov:
Запустить именно как скрипт? У меня демо-счет. Я на нем тестирую. Или вставить этот код в робота?

именно как скрипт, хотя можно и в код робота и посмотреть что в тестере выдает

 

Набросал тестовый советник. расчет идет точный. Вот записи из лога

 

2016.12.18 20:12:35.447   Magic=5
2016.12.18 20:12:35.447   Risk=1
2016.12.18 20:12:35.447   StopLoss=100
2016.12.18 20:12:35.447   TakeProfit=100
2016.12.18 20:12:36.840 EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.12.18 20:12:36.842 2016.12.01 00:00:18   balans = 100000.0 :sl = 100.0: tv = 1.0
2016.12.18 20:12:36.842 2016.12.01 00:00:18   (sl*tv) =100.0
2016.12.18 20:12:36.842 2016.12.01 00:00:18   procent =1000.0
2016.12.18 20:12:36.842 2016.12.01 00:00:18   lot=procent/(sl*tv) =10.0
2016.12.18 20:12:36.842 2016.12.01 00:00:18   failed instant buy 10.00 EURUSD at 0.00000 [Invalid price]
2016.12.18 20:12:36.842 2016.12.01 00:00:18   CTrade::OrderSend: instant buy 10.00 EURUSD at 0.00000 [invalid price]
2016.12.18 20:12:36.855 2016.12.01 00:00:19   balans = 100000.0 :sl = 100.0: tv = 1.0
2016.12.18 20:12:36.855 2016.12.01 00:00:19   (sl*tv) =100.0
2016.12.18 20:12:36.855 2016.12.01 00:00:19   lot=procent/(sl*tv) =10.0
2016.12.18 20:12:36.855 2016.12.01 00:00:19   instant buy 10.00 EURUSD at 1.05930 (1.05891 / 1.05930 / 1.05891)
2016.12.18 20:12:36.855 2016.12.01 00:00:19   deal #2 buy 10.00 EURUSD at 1.05930 done (based on order #2)
2016.12.18 20:12:36.855 2016.12.01 00:00:19   deal performed [#2 buy 10.00 EURUSD at 1.05930]
2016.12.18 20:12:36.855 2016.12.01 00:00:19   order performed buy 10.00 at 1.05930 [#2 buy 10.00 EURUSD at 1.05930]
2016.12.18 20:12:36.863 2016.12.01 00:00:19   CTrade::OrderSend: instant buy 10.00 EURUSD at 1.05930 [done at 1.05930]
2016.12.18 20:12:36.863 2016.12.01 00:00:19   position modified [#2 buy 10.00 EURUSD 1.05930 sl: 1.05830]
2016.12.18 20:12:36.863 2016.12.01 00:00:19   CTrade::OrderSend: modify position #2 EURUSD (sl: 1.05830, tp: 0.00000) [done]
2016.12.18 20:12:36.863 2016.12.01 00:00:19   position modified [#2 buy 10.00 EURUSD 1.05930 sl: 1.05830 tp: 1.06030]
2016.12.18 20:20:56.165 2016.12.01 03:11:11   take profit triggered #2 buy 10.00 EURUSD 1.05930 sl: 1.05830 tp: 1.06030 [#3 sell 10.00 EURUSD at 1.06030]
2016.12.18 20:20:56.165 2016.12.01 03:11:11   deal #3 sell 10.00 EURUSD at 1.06030 done (based on order #3)
2016.12.18 20:20:56.165 2016.12.01 03:11:11   deal performed [#3 sell 10.00 EURUSD at 1.06030]
2016.12.18 20:20:56.165 2016.12.01 03:11:11   order performed sell 10.00 at 1.06030 [#3 sell 10.00 EURUSD at 1.06030]
2016.12.18 20:20:56.165 2016.12.01 03:11:11   balans = 101000.0 :sl = 100.0: tv = 1.0
2016.12.18 20:20:56.165 2016.12.01 03:11:11   (sl*tv) =100.0
2016.12.18 20:20:56.165 2016.12.01 03:11:11   procent =1010.0
2016.12.18 20:20:56.165 2016.12.01 03:11:11   lot=procent/(sl*tv) =10.1
2016.12.18 20:20:56.165 2016.12.01 03:11:11   instant buy 10.10 EURUSD at 1.06041 (1.06030 / 1.06041 / 1.06030)
2016.12.18 20:20:56.165 2016.12.01 03:11:11   deal performed [#4 buy 10.10 EURUSD at 1.06041]
2016.12.18 20:20:56.165 2016.12.01 03:11:11   order performed buy 10.10 at 1.06041 [#4 buy 10.10 EURUSD at 1.06041]
2016.12.18 20:20:56.166 2016.12.01 03:11:11   CTrade::OrderSend: instant buy 10.10 EURUSD at 1.06041 [done at 1.06041]
2016.12.18 20:20:56.166 2016.12.01 03:11:11   position modified [#4 buy 10.10 EURUSD 1.06041 sl: 1.05941]
2016.12.18 20:20:56.166 2016.12.01 03:11:11   CTrade::OrderSend: modify position #4 EURUSD (sl: 1.05941, tp: 0.00000) [done]
2016.12.18 20:20:56.166 2016.12.01 03:11:11   position modified [#4 buy 10.10 EURUSD 1.06041 sl: 1.05941 tp: 1.06141]
2016.12.18 20:20:56.166 2016.12.01 03:11:11   CTrade::OrderSend: modify position #4 EURUSD (sl: 1.05941, tp: 1.06141) [done]
2016.12.18 20:21:11.202 2016.12.01 03:24:11   stop loss triggered #4 buy 10.10 EURUSD 1.06041 sl: 1.05941 tp: 1.06141 [#5 sell 10.10 EURUSD at 1.05941]
2016.12.18 20:21:11.202 2016.12.01 03:24:11   deal #5 sell 10.10 EURUSD at 1.05941 done (based on order #5)
2016.12.18 20:21:11.202 2016.12.01 03:24:11   deal performed [#5 sell 10.10 EURUSD at 1.05941]
2016.12.18 20:21:11.202 2016.12.01 03:24:11   order performed sell 10.10 at 1.05941 [#5 sell 10.10 EURUSD at 1.05941]
2016.12.18 20:21:11.202 2016.12.01 03:24:11   balans = 99990.0 :sl = 100.0: tv = 1.0
2016.12.18 20:21:11.202 2016.12.01 03:24:11   (sl*tv) =100.0
2016.12.18 20:21:11.202 2016.12.01 03:24:11   procent =999.9
2016.12.18 20:21:11.202 2016.12.01 03:24:11   lot=procent/(sl*tv) =9.999000000000001
2016.12.18 20:21:11.202 2016.12.01 03:24:11   instant buy 10.00 EURUSD at 1.05952 (1.05941 / 1.05952 / 1.05941)
2016.12.18 20:21:11.202 2016.12.01 03:24:11   deal performed [#6 buy 10.00 EURUSD at 1.05952]
2016.12.18 20:21:11.202 2016.12.01 03:24:11   order performed buy 10.00 at 1.05952 [#6 buy 10.00 EURUSD at 1.05952]
2016.12.18 20:21:11.203 2016.12.01 03:24:11   CTrade::OrderSend: instant buy 10.00 EURUSD at 1.05952 [done at 1.05952]
2016.12.18 20:21:11.203 2016.12.01 03:24:11   position modified [#6 buy 10.00 EURUSD 1.05952 sl: 1.05852]
2016.12.18 20:21:11.203 2016.12.01 03:24:11   CTrade::OrderSend: modify position #6 EURUSD (sl: 1.05852, tp: 0.00000) [done]
2016.12.18 20:21:11.203 2016.12.01 03:24:11   position modified [#6 buy 10.00 EURUSD 1.05952 sl: 1.05852 tp: 1.06052]
2016.12.18 20:21:11.203 2016.12.01 03:24:11   CTrade::OrderSend: modify position #6 EURUSD (sl: 1.05852, tp: 1.06052) [done]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   take profit triggered #6 buy 10.00 EURUSD 1.05952 sl: 1.05852 tp: 1.06052 [#7 sell 10.00 EURUSD at 1.06052]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   deal #7 sell 10.00 EURUSD at 1.06055 done (based on order #7)
2016.12.18 20:23:17.071 2016.12.01 07:02:54   deal performed [#7 sell 10.00 EURUSD at 1.06055]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   order performed sell 10.00 at 1.06055 [#7 sell 10.00 EURUSD at 1.06052]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   balans = 101020.0 :sl = 100.0: tv = 1.0
2016.12.18 20:23:17.071 2016.12.01 07:02:54   (sl*tv) =100.0
2016.12.18 20:23:17.071 2016.12.01 07:02:54   procent =1010.2
2016.12.18 20:23:17.071 2016.12.01 07:02:54   lot=procent/(sl*tv) =10.102
2016.12.18 20:23:17.071 2016.12.01 07:02:54   instant buy 10.10 EURUSD at 1.06068 (1.06055 / 1.06068 / 1.06055)
2016.12.18 20:23:17.071 2016.12.01 07:02:54   deal performed [#8 buy 10.10 EURUSD at 1.06068]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   order performed buy 10.10 at 1.06068 [#8 buy 10.10 EURUSD at 1.06068]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   CTrade::OrderSend: instant buy 10.10 EURUSD at 1.06068 [done at 1.06068]
2016.12.18 20:23:17.071 2016.12.01 07:02:54   position modified [#8 buy 10.10 EURUSD 1.06068 sl: 1.05968]
2016.12.18 20:23:17.072 2016.12.01 07:02:54   CTrade::OrderSend: modify position #8 EURUSD (sl: 1.05968, tp: 0.00000) [done]
2016.12.18 20:23:17.072 2016.12.01 07:02:54   position modified [#8 buy 10.10 EURUSD 1.06068 sl: 1.05968 tp: 1.06168]
2016.12.18 20:23:17.072 2016.12.01 07:02:54   CTrade::OrderSend: modify position #8 EURUSD (sl: 1.05968, tp: 1.06168) [done]
2016.12.18 20:23:22.836 stopped by user
2016.12.18 20:23:22.836 2016.12.01 07:14:13   position closed due end of test at 1.06050 [#8 buy 10.10 EURUSD 1.06068 sl: 1.05968 tp: 1.06168]
2016.12.18 20:23:22.836 2016.12.01 07:14:13   deal #9 sell 10.10 EURUSD at 1.06050 done (based on order #9)
2016.12.18 20:23:22.836 2016.12.01 07:14:13   deal performed [#9 sell 10.10 EURUSD at 1.06050]
2016.12.18 20:23:22.836 2016.12.01 07:14:13   order performed sell 10.10 at 1.06050 [#9 sell 10.10 EURUSD at 1.06050]
2016.12.18 20:23:22.836 final balance 100838.20 USD
2016.12.18 20:23:22.836 EURUSD,M5: 51484 ticks, 87 bars generated. Environment synchronized in 0:00:00.234. Test passed in 0:10:49.042 (including ticks preprocessing 0:00:01.373).
2016.12.18 20:23:22.836 EURUSD,M5: total time from login to stop testing 0:10:49.276 (including 0:00:00.234 for history data synchronization)
2016.12.18 20:23:22.836 51485 total ticks for all symbols
2016.12.18 20:23:22.837 1 Mb memory used including 8 Mb of history data, 128 Mb of tick data
2016.12.18 20:23:22.837 log file "C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000\logs\20161218.log" written

 Результат из отчета

Сделки
Время   Сделка  Символ  Тип     Направление     Объем   Цена    Ордер   Комиссия        Своп    Прибыль Баланс  Комментарий
2016.12.01 00:00:00     1               balance                                 0.00    0.00    100 000.00      100 000.00      
2016.12.01 00:00:19     2       EURUSD  buy     in      10.00   1.05930 2       0.00    0.00    0.00    100 000.00      
2016.12.01 03:11:11     3       EURUSD  sell    out     10.00   1.06030 3       0.00    0.00    1 000.00        101 000.00      tp 1.06030
2016.12.01 03:11:11     4       EURUSD  buy     in      10.10   1.06041 4       0.00    0.00    0.00    101 000.00      
2016.12.01 03:24:11     5       EURUSD  sell    out     10.10   1.05941 5       0.00    0.00    -1 010.00       99 990.00       sl 1.05941
2016.12.01 03:24:11     6       EURUSD  buy     in      10.00   1.05952 6       0.00    0.00    0.00    99 990.00      
2016.12.01 07:02:54     7       EURUSD  sell    out     10.00   1.06055 7       0.00    0.00    1 030.00        101 020.00      tp 1.06052
2016.12.01 07:02:54     8       EURUSD  buy     in      10.10   1.06068 8       0.00    0.00    0.00    101 020.00      
2016.12.01 07:14:13     9       EURUSD  sell    out     10.10   1.06050 9       0.00    0.00    -181.80 100 838.20      end of test
0.00    0.00    838.20  100 838.20      

 ...

Файлы:
test.mq5  18 kb
 
Sergey Gritsay:

именно как скрипт, хотя можно и в код робота и посмотреть что в тестере выдает

Запущен как скрипт:

 

 
Igor Knyazkov:

Запущен как скрипт:

 

Посмотрите в спецификации инструмента какой способ рассчета
 
Sergey Gritsay:
Посмотрите в спецификации инструмента какой способ рассчета
Способ расчета: Forex. Ваш тестовый робот корректно расчитывает лот. Но, когда я пытаюсь использовать функцию в своем коде - некорректно.
 
Sergey Gritsay:
Посмотрите в спецификации инструмента какой способ рассчета
У вас в коде я заметил, что Вы, для подсчета открытых позиций не используете PositionsTotal(), а используете свою функцию. Почему?  
Может дело в том, что я использую напрямую PositionsTotal() и OrdersTotal()?
 
Igor Knyazkov:
Способ расчета: Forex. Ваш тестовый робот корректно расчитывает лот. Но, когда я пытаюсь использовать функцию в своем коде - некорректно.
значит все таки вы у себя что-то делаете не так.
 
Sergey Gritsay:
значит все таки вы у себя что-то делаете не так.
То есть, скопировать функцию в конец кода и вызвать ее в request.volume - этого недостаточно?)
 
Sergey Gritsay:
значит все таки вы у себя что-то делаете не так.
Вопрос решен. Спасибо за помощь!
Причина обращения: