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

 

А, я вижу проблему... вы установили скрипт для размещения ордера "BUY" вместо того, чтобы изменить внешнюю переменную на BUY STOP... вот почему он разместил рыночный ордер.

Из вашего сообщения:

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;

Попробуйте BUY STOP.


Я получаю 0.12 лота для EURJPY на демо-счете, пополненном на $2300 USD.

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155713274 buy stop 0.12 EURJPY at 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.12000000 lots @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Текущий EquityAtRisk = $22.44, текущий размер лота = 0.12 и цель прибыли = $6.69 для соотношения прибыли и убытков 0.3:1
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Максимально допустимый EquityAtRisk = $23.00 и Максимальный рассчитанный размер лота = 0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 входные данные: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

Я также сделал пример с бай-стопом NZDJPY:

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: open #155714279 buy stop 0.10 NZDJPY at 64.319 sl: 64.134 tp: 64.460 ok<br / translate="no"> 2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: attempted OP_BUYSTOP 0.10000000 lot @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Текущий EquityAtRisk = $22.90, текущий размер лота = 0.1 и цель прибыли = $17.45 для соотношения прибыли и убытков 0.8:1
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Максимально допустимый EquityAtRisk = $23.00 и Максимальный рассчитанный размер лота = 0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=64.297; StopLossBidPrice=64.134; TakeProfitBidPrice=64.46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Теперь цена ордера на вход 64.297 была слишком близка к текущей рыночной цене, поэтому программа orderreliable переместила цену входа на 64.319, но я все равно получил разумный размер лота 0.10.

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

 

Да, это демо-счет, номинированный в долларах США, кредитное плечо 1:100. Хорошо, я только что запустил его на EURJPY в качестве BUY STOP, похоже, на этот раз мы получили хорошие цифры. В журнале эксперта написано:


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: удалено
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: open #155719095 buy stop 0.11 EURJPY at 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: attempted OP_BUYSTOP 0.11000000 lots @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Текущий EquityAtRisk = $20.95, текущий размер лота = 0.11 и цель прибыли = $5.71 для соотношения прибыли и убытков 0.3:1
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Максимально допустимый EquityAtRisk = $22.73 и Максимальный рассчитанный размер лота = 0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 входные данные: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: успешно загружен
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: удален
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1: успешно загружен



... и он разместил отложенный ордер BUY STOP размером 0.11 лота. отлично. Да, похоже, что-то "намудрили" в моем коде, как вы говорите... lol. Я был очень осторожен, когда вставлял ваш код... что это может быть? Хорошо, я проведу отладку здесь и дам вам знать. Извините за беспокойство, Филипп!


Спасибо

Шон

 

Должен ли я начать заново с новой версии, которую вы только что опубликовали, Филипп?


Шон

 

Имеет смысл использовать самые последние.

 

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


(1) Вы упомянули, что есть 2 новых включаемых файла:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... А как насчет старого StopLoss_Manager_2010.05.24.mqh? Этот файл больше не нужен в вашей новой версии?


(2) Где вы говорите:


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

#include <OrderReliable_2010.10.12.mqh>

#include <Trade_Position_Management_2010.10.29.mqh>".


... Это новая версия или OrderReliable? Я использовал LibOrderReliable.mqh. Что-то изменилось в нем? Также, разве нам не нужно включить новый файл Analyze_Currency_Symbol_2010.10.29.mqh?


(3) В этой строке кода вы говорите добавить при использовании вашей новой версии:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... Что такое OpenPrice_ND и StopLossPrice_ND? Это переменные, которые я должен объявить, или они встроены где-то в ваших включаемых файлах? Также в этой новой версии вашей функции LotSize количество параметров и их порядок довольно сильно изменились, не так ли? Вызов функции LotSize в вашей предыдущей версии был следующим:


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);


(4) Я заметил, что в своем коде, используя вашу предыдущую версию, я присвоил CurrentOrderType=OP_BUY; в действительности я делаю стоп-приказ на покупку. Может ли это иметь значение?



Извините за назойливость, но я просто в некотором недоумении от этих вещей.


Спасибо

Шон

 

(1) You mention there's 2 new include files:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Trade_Position_Management_2010.10.29.mqh (26.68 KB)


... А как насчет старого StopLoss_Manager_2010.05.24.mqh? Этот файл больше не нужен в вашей новой версии?


Я действительно не уверен, почему я добавил эту часть в свое первоначальное сообщение, кроме как для того, чтобы конечный пользователь имел полный набор файлов для использования.

Я лично использую обновленную версию этого менеджера стоплоссов, но это не имеет никакого отношения к данной теме, вы должны применять те процедуры стоплоссов, которые вы предпочитаете использовать. Код, который я загрузил в этой теме, не зависит от включаемого файла стоплосса, но он зависит от того, насколько правильно вы настроите свой код для определения цены стоплосса, чтобы вы могли отправить ее в функцию вызова equityatrisk.

(2) Где вы говорите:


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

#include <OrderReliable_2010.10.12.mqh>.

#include <Trade_Position_Management_2010.10.29.mqh>".


... это новая версия или OrderReliable? Я использовал LibOrderReliable.mqh. Что-то изменилось в нем? Также, разве нам не нужно включить новый файл Analyze_Currency_Symbol_2010.10.29.mqh?

Это новая версия, я разместил ссылку на нее внизу своего сообщения на первой странице этой темы (я бы дал ссылку на нее, но поиск сломался, аргх!).

Я модифицировал новую версию так, чтобы она прозрачно работала с брокерами типа ecn. Посылайте ваши ордера через ordersendreliable, и не имеет значения, принимает ли брокер SL и TP на рыночные ордера, скрипт orderreliable сделает это за вас.

(3) В этой строке кода вы говорите добавить при использовании вашей новой версии:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... Что такое OpenPrice_ND и StopLossPrice_ND? Это переменные, которые я должен объявить, или они встроены где-то в ваших включаемых файлах? Также в этой новой версии вашей функции LotSize количество параметров и их порядок довольно сильно изменились, не так ли? Вызов функции LotSize в вашей предыдущей версии был:

Да, это переменные, которые вы должны объявить в какой-то момент в вашем коде и назначить им рыночные цены, по которым вы хотите открыть новую позицию (OpenPrice_ND) и цену стоплосса (StopLossPrice_ND).

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

(4) Я заметил, что в своем коде, используя вашу предыдущую версию, я присвоил CurrentOrderType=OP_BUY; На самом деле, я делаю стоп-приказ на покупку. Может ли это иметь значение?
Это не имеет никакого значения. Важно лишь то, что вы правильно передаете тип ордера в соответствующие функции вызова. Они уже закодированы, чтобы делать правильные вещи в зависимости от типа ордера. Если вы не передадите правильный тип ордера в функцию вызова, то вы определенно получите недействительные результаты от самих функций вызова.

Это все хорошие вопросы, если вы не задаете их, вы не можете ожидать, что научитесь ;)
 
1005phillip:

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

Я лично использую обновленную версию этого стоплосс-менеджера, но это не имеет никакого отношения к данной теме, вы должны применять те процедуры стоплосса, которые предпочитаете использовать. Код, который я загрузил в этой теме, не зависит от включаемого файла стоплосса, но он зависит от того, насколько правильно вы настроите свой код для определения цены стоплосса, чтобы вы могли отправить ее в функцию вызова equityatrisk.



>>> ХОРОШО! У меня есть собственные стоплоссы, так что мне это не нужно - я удалю это!



Это новая версия, я разместил ссылку на нее в нижней части моего сообщения на первой странице этой темы (я бы дал ссылку на нее, но поиск сломан, аргх!).

Я модифицировал новую версию так, чтобы она прозрачно работала с брокерами типа ecn. Посылайте ваши ордера через ordersendreliable и не имеет значения, принимает ли брокер SL и TP на рыночные ордера, скрипт orderreliable сделает это за вас.


>>> Хорошо, я уже использую OrderSendReliable2Step, поэтому я просто оставлю свой код как есть, используя существующий LibOrderReliable.mqh. Тем не менее, разве нам не нужно включить новый файл Analyze_Currency_Symbol_2010.10.29.mqh тоже?



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

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


>>> Понял, так я и думал. Мне кажется, вы пропустили этот мой комментарий --> "Также в новой версии вашей функции LotSize количество параметров и их порядок довольно сильно изменились, не так ли?".




Это не имеет никакого значения. Важно лишь то, что вы правильно передаете ordertype в соответствующие функции вызова. Они уже закодированы, чтобы делать правильные вещи в зависимости от типа ордера. Если вы не передадите правильный ordertype в функцию вызова, то вы обязательно получите недействительные результаты от самих функций вызова.


>>> ХОРОШО!



Это все хорошие вопросы, если вы не задаете их, вы не можете ожидать, что научитесь ;)


>>> Я пытаюсь! Спасибо, Филипп.


Shawn


 

>>> не нужно ли нам включить новый файл Analyze_Currency_Symbol_2010.10.29.mqh?

Не в вашем советнике, но вам нужен этот файл в вашем каталоге include, потому что он вызывается из файла include Trade Position Management.

Имея #include <Trade_Position_Management_2010.10.29.mqh> в своем советнике, вы уже связали оба файла - Trade_Position_Management_2010.10.29.mqh и Analyze_Currency_Symbol_2010.10.29.mqh.

>>>Также в новой версии вашей функции LotSize количество параметров и их порядок довольно сильно изменились, не так ли

Вам больше не нужно основываться на CurrentSymbolType и CurrentCounterPairForCross. Теперь это обрабатывается внутренне.

Если вы заглянете в файл Trade Position, то увидите раздел equityatrisk, там есть комментарии по использованию функции. Они могут помочь, хотя не уверен, насколько они понятны.

 

Это ошибка, которая произошла только со мной?
Я не могу скомпилировать ни один файл с MetaEditor mq4, если я поместил строку с # include.
Я также не смог скомпилировать файлы mq4, которые имеют строку # include в коде.
Только включает строки
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>
.