Эма Кросс! - страница 20

 

Кросс-тестер EMA

Здравствуйте, Codersguru!

Прежде всего, я хочу поблагодарить вас за потрясающие курсы по изучению MT. Без них я не знаю, как бы я выучил mql так быстро. Вы - МУЖЧИНА!!!

Недавно я программировал ea, чтобы иметь возможность торговать множеством различных способов, чтобы я мог тестировать ea на реальном счете, имея несколько настроек, работающих на одной паре и одном ТФ. Мне нравится идея EMA, и я написал советника, который использует ваши критерии. Эта версия сможет торговать практически неограниченным количеством экземпляров советника с различными настройками на одном и том же ТФ/ПАИР или в любой комбинации. Программа устанавливает GlobalVariable в MT и использует ее для создания уникального ID, который затем вставляется в комментарии к открытым сделкам. Затем советник обрабатывает ордера на основе этого уникального ID.

Кроме того, я добавил функцию для записи csv-файла, напоминающего торговый отчет, который включает настройки, действовавшие на момент тестирования (папка expert/files). После торговли таким способом будет много сделок от всех различных советников, так что, по сути, это то место, куда вы пойдете, чтобы получить точные торговые показатели.

Из коробки он должен работать так же, как и V2. Есть несколько дополнительных функций, которые я добавил на тот случай, если кто-то захочет перейти на реальную торговлю.

Я благодарен за все, и мне интересно узнать, что вы думаете по этому поводу!

Nic

 
hellkas:
Привет Хендрик

Не могли бы вы сообщить мне ваши настройки и TF...

Спасибо

Привет Хелкас,

Вот мои пары (таймфрейм для всех пар - дневной)

USDJPY, EURCHF, AUDUSD, EURAUD, USDCAD, USDCHF, AUDCAD, EURCHF.

Настройки: по умолчанию, кроме Reversal=True и Lots=0,1.

Приветствую!

 
Nicholishen:
Привет Codersguru!

Программа устанавливает GlobalVariable в MT и использует ее для создания уникального ID, который затем вставляется в комментарий к открытым сделкам. Затем советник обрабатывает ордера на основе этого уникального ID.

Nic

Nic

Это отличный способ отслеживать ваши ордера и любые отдельные файлы, которые может создавать ваш советник, что еще раз показывает вашу способность видеть то, что другие могут не видеть. Причина, по которой я пишу, заключается в том, что я сделал то же самое, используя OrderComment() для маркировки сделок, и обнаружил, что это создает проблемы в будущем. В том, что;

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

2) Функция GlobalVariable() имеет тип double number. который преобразуется в тип string при использовании в качестве входа OrderComment. Смешивание типов переменных - не самая лучшая привычка в программировании, поскольку это может привести к ошибкам смешивания переменных в будущем, если вы вернетесь и измените свой код.

Чтобы избежать вышеописанного, я использовал функцию MagicNumber в функции OrderSend(). Код ниже - это вызов функции, который я использую для генерации уникального номера, который используется, как вы описали, для отслеживания заказа и ведения записей. Он генерирует номер от 100 до 999. После использования номера новый номер увеличивается на единицу для следующего советника. Если вы поместите вызов этой функции в область функции init() вашего кода, она будет видна только один раз при запуске и останется с вашим советником до его выключения.

Пример;

int OrderID = 0;

int init() {

OrderID = GetTagNumber()

...

...

...

return( 0 );

} // Конец init, функции:

Затем вы можете использовать OrderID для обозначения сделок, записей в файлах и т.д..

//«« <<<>>> »»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»

int

GetTagNumber() { // Sets the SystemTag To....

int PullNumber = 0;

if( GlobalVariableCheck( "PullTag ( Do Not Delete )" ) ) {

PullNumber = GlobalVariableGet( "PullTag ( Do Not Delete )" );

} else {

PullNumber = 100;

} // End If, GlobalVariableCheck:

GlobalVariableSet( "PullTag ( Do Not Delete )", PullNumber + 1 );

if( GlobalVariableGet( "PullTag ( Do Not Delete )" ) > 999 ) {

GlobalVariableSet( "PullTag ( Do Not Delete )", 100 );

} // End If, GlobalVariableSet:

return( PullNumber );

} // End Function, GetTagNumber:

Переменная OrderID должна быть объявлена вне функции init(), чтобы остальная часть вашей программы могла видеть ее значение.

Вы можете изменить нижний и верхний пределы (100 - 999) на любые, какие захотите, или удалить верхний предел, и он будет продолжать увеличиваться без сброса.

Причина названия переменной ... "PullTag ( Do Not Delete )" ... в том, что теперь вы можете просматривать и удалять глобальные переменные вне советника. Не удалять - это предупреждение, которое появляется при просмотре глобальных переменных. Если вы удалите переменную PullTag, то при следующем запуске советника она снова будет иметь значение 100. Глобальные переменные сохраняют свое значение даже при выключении рабочей станции.

The CockeyedCowboy

Как всегда я говорю слишком много.

 

...как раз когда я задавался вопросом, почему SL/TP не отображаются в истории. Спасибо за понимание! Я включу это в свой код. Большое спасибо за столь ценный ресурс!!!

 

Nic

Если вы откроете окно торгового терминала и перейдете на вкладку история счета, > щелкните правой кнопкой мыши на любой области терминала, > щелкните на ярлыке меню> комментарии. Вы сможете просмотреть свои комментарии и все добавленные комментарии от вашего брокера (обычно они находятся внутри [ .... ]) в окне терминала.

The CockeyedCowboy

 

Да... Я заметил, что все TP/SL добавляются как [tp][sl]. Ваш код мне нравится больше.

 

что случилось, гуру кодеров? что случилось? Я загрузил вашу последнюю версию ema cross ea в посте 369, вы видите, что происходит с тестом grv , но скажите мне, почему?

Файлы:
1_4.gif  8 kb
 

Ребята, пожалуйста,

помогите мне кое с чем. Почему опция REVERSAL включена в этот советник? Я просто не понимаю, зачем торговать против точки пересечения обеих EMA...

Спасибо...

Пока что с REVERSAL true = я заработал более 100 пунктов, но это безумие. Я имею в виду, что когда точка пересечения ЕМА появится, этот советник откроет абсолютно противоположную сделку, так что вы потеряете деньги...

 

про-тренд против контртренда

glader:
Ребята, пожалуйста,

помогите мне кое с чем. Почему опция REVERSAL включена в этот советник? Я просто не понимаю, зачем торговать против точки пересечения обеих EMA...

Спасибо...

До сих пор с REVERSAL true = я заработал более 100 пунктов, но это безумие. Я имею в виду, когда появляется точка пересечения EMA, этот советник откроет абсолютно противоположную сделку, так что вы потеряете деньги...

Ну, вы можете выбрать работу против тренда.

ИМХО, в контртренде мы открываем позицию по лучшей цене и несем некоторые потери в начале, а затем получаем максимальную сумму, которую мы могли бы получить!

 

недостаточно данных!

Audio:
Что случилось, гуру кодеров? Что случилось? Я загрузил вашу последнюю версию ema cross ea в посте 369, вы видите, что происходит с тестом grv, но скажите мне, почему?

Аудио,

Пожалуйста, не плачьте .

Я думаю, что у вас недостаточно данных по истории.

Посмотрите мой обратный тест и прямой тест !

Файлы:
Причина обращения: