Перейти к содержанию

Доработка советников: общая тема


Рекомендуемые сообщения

Доработка советников: общая тема Опубликовано

Если уж что то делаешь, то предусматривай все варианты, у меня сейчас достаточно обширная собрание разных готовых функций, поэтому для написания советника мне нужно переписать всего 3 функции, собрать необходимый функционал и немного его подкорректировать, общих делов минимум, так что это твой скелет функции трала и ты его будешь использовать во многих своих роботах, поэтому неполенись \M/

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
  • Ответов 2,5k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Версия с правками. Я немного свернул код, чтобы не перебирались ордера попусту и чтобы проверка красной/синей зоны делалась в одном месте. Прогнал в тесте с настройками по умолчанию. Ожидаемо лье

Перейти

Нате 1_2_3 _Fraktal.mq4

Перейти

Система маятника, или попрыгунчика, или фиг ее знает как ее еще назвать не намного младше сетки мартингейла. Мы в далеком 2017 писали по ней сов с индикатором на вход: https://tlap.com/forum/labo

Перейти
Доработка советников: общая тема Опубликовано

Парни помогите пожалуйста нужна строчка к сове, нужно чтоб ПЛЮСОВАЯ сделка закрывалась по индикатору а не по тейкпрофиту.

Вот код открытия первой сделки.

//=========================================================  Открытие первого Buy  ==============================================

double StartLot ;
int ticketbuy=0, ticketsell=0 ;
if (TradeBuy && totalbuy==0){
if (ticketbuy ==0){
if (Signal > 0 ) {
DeleteObject() ;
StartLot = NormalizeDouble(Lot,dig);
if(Info) Print("Команда на открытие первого BUY");
comment=StringConcatenate("1-й ордер Buy, ","Magic : ",MagicNumber) ;
ticketbuy = SendOrder(OP_BUY , StartLot, 0, 0, MagicNumber, comment, Error);
if (!IsTesting() || IsVisualMode() || !IsOptimization()){
if (Info) PlaySound("alert.wav");
Sleep(1000); // если это не тестирование - "засыпаем" на 1 секунду.;
}
}
}
}


Сигнал на покупку даёт строчка (Signal > 0 )

Добавлено: 19-09-2013 03:34:15

вроде нашёл код,

но надо теперь чтоб только плюсовые закрывал

if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber) {
if (OrderType() == OP_BUY) {
if (Signal OrderClose(OrderTicket(),OrderLots(),Bid,1); // закрываем позицию

} }
//--------------------------------------------------------

if (OrderType() == OP_SELL) {
if (Signal > 0 ){
OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию

} } } Изменено пользователем ss1975
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Ну можно просто добавить немного условий.

Спойлер

if (OrderType()==OP_BUY)
{
if (OrderOpenPrice() {
Функция закрытия данного ордера
}
}
if (OrderType()==OP_SELL)
{
if (OrderOpenPrice()>Ask)
{
Функция закрытия данного ордера
}
}



ну это примерный алгоритм, сам подкорректируешь как тебе надо
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Спасибо.
но немного сделал по другому,

 if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)   { 
if (OrderType() == OP_SELL) {
if (Signal > 0 ){
if (SumProfit >0){

OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию

} }}}}

вроде работает)
эт я над интегрой изголяюсь))

Добавлено: 20-09-2013 04:00:19

Помогите доделать сигнального советника. сдаётся мне что я не то делаю

extern string Sound = "alert.wav"; //-- звуковой файл


//-------------------------------------------------------------------
int Bar_Count;
int Signal;
//-------------------------------------------------------------------
int init()
{

Bar_Count = iBars(Symbol(), Period());
return(0);
}

//-------------------------------------------------------------------
int start()
{

GetSignal();
if(Bar_Count {
if (Signal {
PlaySound(Sound);

}
Bar_Count = iBars(Symbol(), Period());
}}
///////////////////////////////////////////////////////////////////////////

if(Bar_Count {
if (Signal > 0 ){
{
PlaySound(Sound);

}
Bar_Count = iBars(Symbol(), Period());
}}
/////////////////////////////////////////////////////////////////////////
return(0);
}

//------------------------------------------------------------------

//+-------------------------------------------------------------------------------------+
//| Генерация сигналов покупки и продажи по значениям двух стохастиков |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
Signal = 0;

// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================

// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================

return(0);




Добавлено: 20-09-2013 07:22:27

Вроде сделал)
Спойлер


//+------------------------------------------------------------------+
//| MA_Gudok.mq4 |
//+------------------------------------------------------------------+

extern string Sound = "ss.wav"; //-- звуковой файл


//-------------------------------------------------------------------
int Signal;
int text;
int Bar_Count;
//-------------------------------------------------------------------
int init()
{
Bar_Count = iBars(Symbol(), Period());
return(0);
}

//-------------------------------------------------------------------
int start()
{

CheckMACross();
if(Bar_Count
{ if (Signal PlaySound(Sound);
//Alert (text+"SELL"); // Есть пересечение
Comment("ПОРА В SELL-УДАЧИ ");
Sleep(1000);
}
Bar_Count = iBars(Symbol(), Period());
}

//////////////////////////////////////////////////////

{ if (Signal > 0 ){
PlaySound(Sound);
Comment("ПОРА В BAY-УДАЧИ ");
//Alert (text+"BAY"); // Есть пересечение
Sleep(1000);
}
Bar_Count = iBars(Symbol(), Period());
}
return(1);
}

//------------------------------------------------------------------
int CheckMACross()
{
Signal = 0;

// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================

// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================

return(0);

}

Изменено пользователем ss1975
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Вопрос все еще актуален, нужные функции есть в MT4i - TradeCopy декомпил обеих сов прилагаю. Возможно, кому-то удастся доработать советник.

Цитата

IncludeSymbols If not blank, a comma-separated list of symbols to include in the
messages to the receiver. This must exactlymatch the broker’s
names, including upper/lower case such as
EURUSDfx,GBPUSDfx. Trades for symbols which are not on
this list are not included.
IncludeMagicNumbers If not blank, a comma-separated list of EA magic numbers to
include in the messages to the receiver. For example,
0,1234,6789 will include manual orders (which have magic
number 0), plus orders from the EA(s) which use the magic
numbers 1234 and 6789

AccountExport-EA.mq4
MT4i_-_TradeCopy_Sender.mq4

Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

вот здесь мне нужно сделать подсчет сколько баров "живет" открытый ордер... а то я уже себе голову сломал)))

straightforward.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Выбираем ордер, потом
(TimeCurrent() - OrderOpenTime())/Таймфрейм*60
Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.
Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет.

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Выбираем ордер, потом
(TimeCurrent() - OrderOpenTime())/Таймфрейм*60
Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.
Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет.


текущий таймфрейм возвращает функция Period()
таким образом получим:
bars = MathFloor((TimeCurrent() - OrderOpenTime())/Period()*60.0);

Можно также рассчитать с помощью функции iBarShift, которая возвращает номер бара по времени.
Только нужно учитывать, что нумерация обратная - тоесть нужно от более раннего отнимать познее время:
bars = iBarShift(NULL, 0, OrderOpenTime()) - iBarShift(NULL, 0, TimeCurrent());
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен

Expert_PSAR.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен



У Вас уже есть контроль открытия нового бара, и мне кажеться, что лучше всего вставить в блок 5 в оператор else для if (Signal != 0)...
Таким образом, если на текущем баре не было сигнала для открытия ордеров, то можем модифицировать существующие.
Также можно вынести функцию FindOrders(); из Trade и поставить ее перед оператором if: она нужна и для открытия ордеров и для трала, поэтому чтобы не дублировать вызов, лучше это сделать заранее.
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения.

Спойлер

extern int Kd1=1;
extern int Kd2=0;
extern int Kd3=0;
extern int Kd4=0;
extern int Kd5=1;
extern int Kd6=1;
extern int Kd7=1;
extern int Kd8=0;
extern int Kd9=0;
extern int Kd10=0;

static int Order[];
int init()
{
Order[0]=Kd1;
Order[1]=Kd2;
Order[2]=Kd3;
Order[3]=Kd4;
Order[4]=Kd5;
Order[5]=Kd6;
Order[6]=Kd7;
Order[7]=Kd8;
Order[8]=Kd9;
Order[9]=Kd10;
return(0);
}

int start()
{
for (int i=0; i {
Print ("Значение буфера ",i, " ", Order);
}
//....
return(0);
}




А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения.

Спойлер

extern int Kd1=1;
extern int Kd2=0;
extern int Kd3=0;
extern int Kd4=0;
extern int Kd5=1;
extern int Kd6=1;
extern int Kd7=1;
extern int Kd8=0;
extern int Kd9=0;
extern int Kd10=0;

static int Order[];
int init()
{
Order[0]=Kd1;
Order[1]=Kd2;
Order[2]=Kd3;
Order[3]=Kd4;
Order[4]=Kd5;
Order[5]=Kd6;
Order[6]=Kd7;
Order[7]=Kd8;
Order[8]=Kd9;
Order[9]=Kd10;
return(0);
}

int start()
{
for (int i=0; i {
Print ("Значение буфера ",i, " ", Order);
}
//....
return(0);
}




А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки.



Массив хоть и указан без размера, но он не динамический как в некоторых языках.
Нужно перед использованием масива установить его размер с помощью ArrayResize(Order, 10);
и модификатор static там бесполезен: массив и так объявлен как глобальная переменная. Изменено пользователем Pavel888
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Прошу помощи у программистов!
Требуется конвертировать советника с mql4 в C# для cAlgo API
Советник не коммерческий. Писал его программист с соседнего форума.
Буду очень признателен!

EA.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано


Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами



в советнике нет привязки к счету...
accountNumber = 0;

пусть так и остаётся...
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано



Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами



в советнике нет привязки к счету...
accountNumber = 0;

пусть так и остаётся...


Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта.
Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано
Цитата


Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта.



упс... :)
пора спать!
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Друзья, взгляните в свободное время, плиз.
Вроде, как интересный советник для M1, на демо (Alpari, ECN) неплохо торгует. Ключ в архиве, работает до 9 ноября.

expert.rar

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Убрал ограничение по времени...
Рекомендую оформить тему как положено для советников...

Trio_Dancer.ex4

Изменено пользователем xbms
Ссылка на сообщение
Поделиться на другие сайты

  • 2 weeks later...
Доработка советников: общая тема Опубликовано

Помогите пожалуйста доработать советник e-News-Lucky , которым с нами великодушно поделился Павел, что бы коэффициент лота к депозиту был постоянный. При росте депозита - рос и лот.
Депозит 1000 - лот 0,70; Депозит 1500 - лот 1,05; Депозит 2000 - лот 1,40; и пример на понижение: Депозит 500 - лот 0,35.
Только чтобы лот плавно рос в след за плавно растущим депозитом, и также плавно уменьшался при уменьшении депозита. Ну и чтобы была возможность выставить первоначальный лот не только 0,7 к 1000, но и другие значения.
Только если кто возьмется сделать такое, пожалуйста другие параметры советника не трогайте, не изменяйте.

e-News-Lucky$.mq4

Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Друзья! У меня при компиляции одного советника компилятор выдал 3 предупреждения. Советник был декомпилирован. Вот они:

'f0_1' - comparison expression expected (93, 14)
'f0_4' - comparison expression expected (380, 14)
'f0_4' - comparison expression expected (491, 8)

В чем причина? Как их убрать и влияют ди они на функционал советника. Вот код к которому относятся ошибкиж ( строки с ошибками помечены комментариями // ЭТА СТРОКА)


'f0_1' - comparison expression expected (93, 14)


error_92 = GetLastError();
if (error_92 == 128/* TRADE_TIMEOUT */ || error_92 == 142 || error_92 == 143) {
Sleep(66000);
if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)) { // ЭТА СТРОКА
PlaySound("expert.wav");
return;
}
Print("Error(", error_92, ") set order: ", ErrorDescription(error_92), ", try ", Li_96);
} else {


--------------------------------------------------------

'f0_4' - comparison expression expected (380, 14)

if (error_84 == 128/* TRADE_TIMEOUT */ || error_84 == 142 || error_84 == 143) {
Sleep(66666.0);
if (f0_4(A_symbol_0, A_cmd_8, A_magic_36, datetime_52)) { // ЭТА СТРОКА
PlaySound("alert2");
break;
}
}


--------------------------------------

'f0_4' - comparison expression expected (491, 8)

if (f0_4("", -1, MagicNumber)) { // ЭТА СТРОКА
if (a1(Ld_0, TrailingStop, TrailingStart, AccountBalance())) {
if (a2(Gd_196, Ld_0, TrailingStop, TrailingStep, AccountEquity())) {
Gd_196 = Ld_0 - TrailingStop;
Alert(AccountCompany(), " Достигнут новый уровень профита." + DoubleToStr(Gd_196, 0));
}
}
} else Gd_196 = -999999999;


Ссылка на сообщение
Поделиться на другие сайты

Доработка советников: общая тема Опубликовано

Возможно стоит проверить как объявлены эти функции. По тому как их используют они должны иметь Тип bool и для того чтобы уж наверняка исключить, в условия их использования стоит вписать сравнение по типу if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==True) или if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==1)

Ссылка на сообщение
Поделиться на другие сайты

  • idinesh changed the title to Assae Elite Pro tlap version source code need i have plan convert this mt4 to mt5 and it possible mt4 dll file modified mt5 version
  • Pavel888 pinned this тема

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • ×
    ×
    • Создать...