Ответ
 
Опции темы
Старый 25.05.2013, 22:07   #1281 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,250
Репутация: 1961
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 346
Поблагодарили 1,890 раз(а) в 1,067 сообщениях
Поинты: 1266
Отправить сообщение для Ugar с помощью ICQ
Сообщение от Schielend Посмотреть сообщение
Спасибо за помощь. Теперь возник вопрос, как проверить упорядочены ли числа в массиве или нет?
Сам смог сделать проверку только без массива, чтобы протестировать стратегию

Скрытый текст

// Покупка
/*
if (stochF1>stochF2 && stochF2>stochF3 && stochF3>stochF4 && stochF4>stochF5 && stochF<Level_UPF)
{
r=2;
}
// Продажа
if (stochF1<stochF2 && stochF2<stochF3 && stochF3<stochF4 && stochF4<stochF5 && stochF>Level_DOWNF)
{
r=1;
}*/
[свернуть]

Но хотелось бы все таки массивом, чтобы при изменении N не переписывать часть программы.
На ум приходит только присвоение произвольной переменной какого-нибудь значения (например 2 для покупки и 1 для продажи) и затем суммирования их внутри цикла и сравнение с требуемым значением в зависимости от количества баров N, но такой вариант будет плохим.
Что значит упорядочены или нет? В какие ячейки какие данные загнал, там они и будут, массив сам по себе не перемешивает ячейки.
Я же привёл пример как в цикле заполнить массив стохастиком.
Длинна массива = количеству проходов в цикле = N.
Так же в цикле перебери массив и проверь условия. А вообще, в цикле можно перебрать стохастик сразу проверяя условия и не записывая в массив. То есть вообще обойтись без массива. Конечно, с массивом оптимальнее, так как можно экономить вызовы индикатора. Если надо данные 2 линий стохастика, можно использовать двухмерный массив.
2 линии ячеек, длинной N.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 26.05.2013, 00:31   #1282 (permalink)
Активный участник
 
Аватар для _SERG_
 
Регистрация: 21.07.2009
Сообщений: 241
Репутация: 74
_SERG_
Сказал(а) спасибо: 7
Поблагодарили 74 раз(а) в 60 сообщениях
Поинты: 282
Народ, кто как видит процесс или сталкивался с таким вопросом:
Как отрабатывает приход котировки функция Start() в мультивалютном советнике, если советник подключён к одному инструменту, например к EURUSD. Только когда котировка приходит по инструменту? Или ... (Ваш взгляд.)
(Первая проба пера в мультивалютниках. )

Последний раз редактировалось _SERG_; 26.05.2013 в 00:32. Причина: Лишнее убрал.
_SERG_ на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 26.05.2013, 05:17   #1283 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от Schielend Посмотреть сообщение
как проверить упорядочены ли числа в массиве или нет?
Тока перебором. Единственное, что можно оптимизировать - завершить цикл досрочно, как только найден 1й "неупорядок". Т.е. в функции сразу ставить return(false) или break. Проверка на 3 условия - упорядочено по возрастанию / убыванию / неупорядоченно:

Скрытый текст

PHP код:
double
    daStoch
[5], // массив
    
dDiff // разница меж значениями массива
;
int
    iBar 
ArraySize(da_Stoch) - 1// счётчик цикла
    
iUpOrDown // переменная - индикатор направления
;

while(
iBar 0) { // проверка упорядоченности
    
dDiff daStoch[iBar] - daStoch[iBar-1];

    if(
dDiff 0.0) { // возрастание на этом баре
        
if(iUpOrDown 0) { // а было убывание
             
iUpOrDown 0// знач массив не упорядочен
             
break; // дальше не проверяем
        
} else iUpOrDown 1// пока - возрастание
    
}

    else if(
dDiff 0.0) { // убывание на этом баре
        
if(iUpOrDown 0) { // а было возрастание
             
iUpOrDown 0// знач массив не упорядочен
             
break; // дальше не проверяем
        
} else iUpOrDown = -1// пока - убывание
    
}
    
    
iBar--;
}

// использование результата:
if(iUpOrDown 0) {
    
// покупка
} else if(iUpOrDown 0) {
    
// продажа

[свернуть]


Сообщение от Ugar Посмотреть сообщение
Что значит упорядочены или нет? В какие ячейки какие данные загнал, там они и будут, массив сам по себе не перемешивает ячейки.
Имееццо в виду упорядочены по возастанию / убыванию значений, не индексов

Сообщение от _SERG_ Посмотреть сообщение
Как отрабатывает приход котировки функция Start() в мультивалютном советнике, если советник подключён к одному инструменту, например к EURUSD. Только когда котировка приходит по инструменту?
Стопудофф, по тику инструмента к графику которого подвешен бот. Если частота его тиков не устраивает - основной код можно сунуть в бесконечный цикл с нужной паузой между итерациями. В MT5 функция Start уже называеццо правильно - OnTick, а кроме неё есть OnTimer - можно всунуть основное тело туда или сюда. А можно OnTimer проверять пришел ли тик 2й пары и запускать основной цикл. Там OnTick и OnTimer работают параллельно

Последний раз редактировалось ale002; 26.05.2013 в 05:21.
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
_SERG_ (26.05.2013)
Старый 29.05.2013, 08:14   #1284 (permalink)
Новичок форума
 
Аватар для Александр К
 
Регистрация: 22.10.2009
Сообщений: 4
Репутация: 0
Александр К
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Поинты: 2
Сообщение от alexshell Посмотреть сообщение
Неправ в чём? Что в операторе if() можно не использовать else? Или что условия неправильно понял? Судя по ответу спасибо всё таки у Александра К заработало всё как надо.
Спасибо написал за отзывчивость! А пропал на время потому, что все осталось по старому, но на результат траления не влияет..
Александр К вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 29.05.2013, 09:04   #1285 (permalink)
Элитный участник
 
Аватар для alexshell
 
Регистрация: 29.10.2010
Сообщений: 650
Репутация: 1669
alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell alexshell
Сказал(а) спасибо: 917
Поблагодарили 1,667 раз(а) в 584 сообщениях
Поинты: 339
Сообщение от Александр К Посмотреть сообщение
Спасибо написал за отзывчивость! А пропал на время потому, что все осталось по старому, но на результат траления не влияет..
Ну так выложите код с описанием правильной работы трала. Всем миром поможем.
alexshell на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 31.05.2013, 07:39   #1286 (permalink)
Активный участник
 
Аватар для Юрий070
 
Регистрация: 10.07.2012
Сообщений: 209
Репутация: 147
Юрий070 Юрий070
Сказал(а) спасибо: 73
Поблагодарили 146 раз(а) в 72 сообщениях
Поинты: 123
Помогите кто-нибудь. Можно ли вставить в код советника какую-либо команду, чтобы при ошибке 130 ордер принудительно закрывался?
Юрий070 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 31.05.2013, 08:16   #1287 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от Юрий070 Посмотреть сообщение
Помогите кто-нибудь. Можно ли вставить в код советника какую-либо команду, чтобы при ошибке 130 ордер принудительно закрывался?
Конечно можно, но только если эта ошибка появляется НЕ во время установки ордера.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Юрий070 (31.05.2013)
Старый 31.05.2013, 08:21   #1288 (permalink)
Активный участник
 
Аватар для Юрий070
 
Регистрация: 10.07.2012
Сообщений: 209
Репутация: 147
Юрий070 Юрий070
Сказал(а) спасибо: 73
Поблагодарили 146 раз(а) в 72 сообщениях
Поинты: 123
Так и есть. Как можно закрыть открытый ордер если он не модифицируется, какую команду нужно вставить в код, чтобы советник закрыл ордер с конкретным магиком по текущей цене?
Юрий070 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 31.05.2013, 08:49   #1289 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от Юрий070 Посмотреть сообщение
Так и есть. Как можно закрыть открытый ордер если он не модифицируется, какую команду нужно вставить в код, чтобы советник закрыл ордер с конкретным магиком по текущей цене?
Нужно проверить какую ошибку выдаёт попытка модифицировать ордер и соответственно поставить условие "если ошибка 130, то OrderClose(тикет, лот, цена, проскальзывание, цвет стрелки)"
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 11:38   #1290 (permalink)
Активный участник
 
Аватар для chillm
 
Регистрация: 27.04.2013
Сообщений: 175
Репутация: 74
chillm
Сказал(а) спасибо: 146
Поблагодарили 73 раз(а) в 37 сообщениях
Поинты: 122
Подскажите пожалуйста, как добавить открытие отложенного ордера, при условии что он должен открыться в расстоянии 10 пунктов от последнего открытого ордера(или с определенным магиком)

Пример:
У меня открылся ордер в бай. Если цена пошла вверх на 10 пунктов, устанавливается отложенный ордер бай(с установленным ТП и СЛ) на расстоянии 20 п от открытого ордера.

Подскажите пожалуйста, очень нужно!...........
chillm вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 11:55   #1291 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,250
Репутация: 1961
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 346
Поблагодарили 1,890 раз(а) в 1,067 сообщениях
Поинты: 1266
Отправить сообщение для Ugar с помощью ICQ
Сообщение от chillm Посмотреть сообщение
Подскажите пожалуйста, как добавить открытие отложенного ордера, при условии что он должен открыться в расстоянии 10 пунктов от последнего открытого ордера(или с определенным магиком)

Пример:
У меня открылся ордер в бай. Если цена пошла вверх на 10 пунктов, устанавливается отложенный ордер бай(с установленным ТП и СЛ) на расстоянии 20 п от открытого ордера.

Подскажите пожалуйста, очень нужно!...........
Нужно 2 локальных флага и переменная для запоминания цены открытия бай.
Перебрать в цикле все ордера с фильтрацией по символу и маджику.
Если при переборе найден отложенный ордер, взвести флаг наличия отложенного ордера. Если найден бай, посчитать его прибыль в пунктах.
Если прибыль в пунктах достигла заданного, взвести флаг установки отложенного ордера и записать в переменную цену открытия бай.
После выхода из цикла проверить флаги. Если флаг наличия отложенного ордера не взведён (нет отложенного ордера) и взведён флаг установки отложенного ордера, установить отложенный ордер посчитав цену открытия относительно записанной в переменную цены открытия бай.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ale002 (05.06.2013), chillm (05.06.2013)
Старый 05.06.2013, 12:29   #1292 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от Ugar Посмотреть сообщение
Нужно 2 локальных флага и переменная для запоминания цены открытия бай.
Зачем так много, достаточно 1 переменной с ценой, которой присвоен 0 до перебора ордеров. Если при переборе встречен рыночный ордер - переменной присваивается его цена открытия или сразу расчётная цена выставления отложки. Если встречен отложенный ордер - присваивается ноль и делается break. А после цикла - если в переменной не ноль, знач надо брать из неё значение и ставить туда отложку
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Ugar (05.06.2013)
Старый 05.06.2013, 12:51   #1293 (permalink)
Элитный участник
 
Аватар для Ugar
 
Регистрация: 13.03.2009
Сообщений: 2,250
Репутация: 1961
Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar Ugar
Сказал(а) спасибо: 346
Поблагодарили 1,890 раз(а) в 1,067 сообщениях
Поинты: 1266
Отправить сообщение для Ugar с помощью ICQ
Сообщение от ale002 Посмотреть сообщение
Зачем так много, достаточно 1 переменной с ценой, которой присвоен 0 до перебора ордеров. Если при переборе встречен рыночный ордер - переменной присваивается его цена открытия или сразу расчётная цена выставления отложки. Если встречен отложенный ордер - присваивается ноль и делается break. А после цикла - если в переменной не ноль, знач надо брать из неё значение и ставить туда отложку
Можно и так. Эту задачу можно решить несколькими способами. А какой способ лучше, зависит от остального кода. Например, в этом же цикле может выполняться ещё что то...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ale002 (05.06.2013)
Старый 05.06.2013, 13:29   #1294 (permalink)
::: __,,,^._.^,,,__ :::
 
Аватар для ale002
 
Регистрация: 28.02.2010
Сообщений: 1,246
Репутация: 2528
ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002 ale002
Сказал(а) спасибо: 794
Поблагодарили 2,502 раз(а) в 770 сообщениях
Поинты: 670
Сообщение от Ugar Посмотреть сообщение
какой способ лучше, зависит от остального кода
Это да. Но чаще можно ваще не гонять перебор ордеров по каждому тику - это тормозит, например, оптимизацию. Этого цикла бывает достаточно одного - при инициализации. А дальше - вместе с выставлением ордера Buy писать в переменную Buy_Level уровень цены, по достижении которого надо выставлять BuyLimit. Потом по каждому тику проверять пересекла его цена или нет. Если да - выставлять и обнулять эту переменную, если нет - спать до след тика. Всего одна проверка (точнее - 2, для buy и sell), оч быстрый алгоритм
ale002 вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
tommy27 (05.06.2013)
Старый 05.06.2013, 13:48   #1295 (permalink)
Активный участник
 
Аватар для chillm
 
Регистрация: 27.04.2013
Сообщений: 175
Репутация: 74
chillm
Сказал(а) спасибо: 146
Поблагодарили 73 раз(а) в 37 сообщениях
Поинты: 122
Сообщение от ale002 Посмотреть сообщение
Это да. Но чаще можно ваще не гонять перебор ордеров по каждому тику - это тормозит, например, оптимизацию. Этого цикла бывает достаточно одного - при инициализации. А дальше - вместе с выставлением ордера Buy писать в переменную Buy_Level уровень цены, по достижении которого надо выставлять BuyLimit. Потом по каждому тику проверять пересекла его цена или нет. Если да - выставлять и обнулять эту переменную, если нет - спать до след тика. Всего одна проверка (точнее - 2, для buy и sell), оч быстрый алгоритм
Я только начинаю программировать в mql4, и не совсем понимаю как это все реализовать.
Вот весь код моего советника, он очень простой, открывает сделку по индикатору, и закрывает ее при появлении противоположного сигнала. Помогите пожалуйста добавить сюда выставление отложек
Цитата:
extern int MagicNumber = 20130531;
extern double PosLot = 0.1;

extern int TP = 50; // если 3 или 5 знаков, то считаем что это пипсы. Иначе - это тики(поинты).
extern int SL = 200;

//переменные типа 1/0
extern int Trail = 0; // тралить ли ордер.
extern int UseSL = 0; // выставлять ли СЛ по алгоритму при открытии ордера
extern int UseTP = 0; // выставлять ли ТР

int SlippageClose = 100; // в тиках
int SlippageOpen = 10;


double Lot = 0.1;
datetime g_ZeroBar_OpenTime = 0;
//int _maxPositions = 999;
int MaxTry = 2; // количество попыток закрытия ордера...

int gi_132 = 0;

double gd_152;

double g_ibuf_0[6];
double g_ibuf_1[6];
double g_ibuf_2[6];
double g_ibuf_3[6];
double g_ibuf_4[6];
double g_ibuf_5[6];



int init() {
int ai_0;
int ai_4;
double ld_24;
double ld_16;
double ld_32;
double ld_40;
double ld_48;
double ld_56;

Lot = PosLot;
//if (СтратаСТП && СтратаБезТП) Lot = PosLot/2;


//if (СтратаСТП && СтратаБезТП) _maxPositions = MaxPositions*2;

if (Digits == 3 || Digits == 5) gd_152 = 10.0 * Point;
else gd_152 = Point;

if (MaxTry < 1) MaxTry = 1;

return (0);
}

int deinit() {
return (0);
}

int start() {

/*
updateBuffs2();
string l_CommentStr =

"\n 0: " + DoubleToStr( g_ibuf_0[0], 5) + "; " + DoubleToStr( g_ibuf_0[1], 5) + "; " + DoubleToStr( g_ibuf_0[2], 5) + "; " + DoubleToStr( g_ibuf_0[3], 5) + "; " + DoubleToStr( g_ibuf_0[4], 5) + "; "
+ "\n 1: " + DoubleToStr( g_ibuf_1[0], 5) + "; " + DoubleToStr( g_ibuf_1[1], 5) + "; " + DoubleToStr( g_ibuf_1[2], 5) + "; " + DoubleToStr( g_ibuf_1[3], 5) + "; " + DoubleToStr( g_ibuf_1[4], 5) + "; "
+ "\n 2: " + DoubleToStr( g_ibuf_2[0], 5) + "; " + DoubleToStr( g_ibuf_2[1], 5) + "; " + DoubleToStr( g_ibuf_2[2], 5) + "; " + DoubleToStr( g_ibuf_2[3], 5) + "; " + DoubleToStr( g_ibuf_2[4], 5) + "; "
+ "\n 3: " + DoubleToStr( g_ibuf_3[0], 5) + "; " + DoubleToStr( g_ibuf_3[1], 5) + "; " + DoubleToStr( g_ibuf_3[2], 5) + "; " + DoubleToStr( g_ibuf_3[3], 5) + "; " + DoubleToStr( g_ibuf_3[4], 5) + "; "
+ "\n 4: " + DoubleToStr( g_ibuf_4[0], 5) + "; " + DoubleToStr( g_ibuf_4[1], 5) + "; " + DoubleToStr( g_ibuf_4[2], 5) + "; " + DoubleToStr( g_ibuf_4[3], 5) + "; " + DoubleToStr( g_ibuf_4[4], 5) + "; "
+ "\n 5: " + DoubleToStr( g_ibuf_5[0], 5) + "; " + DoubleToStr( g_ibuf_5[1], 5) + "; " + DoubleToStr( g_ibuf_5[2], 5) + "; " + DoubleToStr( g_ibuf_5[3], 5) + "; " + DoubleToStr( g_ibuf_5[4], 5) + "; ";

Comment (l_CommentStr);
*/

if (g_ZeroBar_OpenTime != Time[0]){
g_ZeroBar_OpenTime = Time[0];



//TrailOrders();

double sl1= 0;
double tp1= 0;

if (BuySignal()){
CloseAllSellTrades();

if (UseSL)
sl1 = GetBuyStopInitial();
else
sl1 = GetTrailedBuyStop();

if (UseTP) tp1 = Ask + TP*gd_152;

OrderSend(Symbol(), OP_BUY , Lot, Ask, SlippageOpen, sl1, tp1, "BS buy", MagicNumber, 0, Blue);

if(IsTradeAllowed()) OrderSend(Symbol(), OP_BUY , Lot, Ask, SlippageOpen, sl1, tp1, "BS buy", MagicNumber, 0, Blue);

}


if (SellSignal()) {
CloseAllBuyTrades();

if (UseSL)
sl1 = GetSellStopInitial();
//else
// sl1 = GetTrailedSellStop();
if (UseTP) tp1 = Bid - TP*gd_152;
OrderSend(Symbol(), OP_SELL , Lot, Bid, SlippageOpen, sl1, tp1, "BS Sell", MagicNumber, 1, Red);

}
}
return (0);
}

int IsUpBar(int ai_0) {
if (Close[ai_0] > Open[ai_0]) return (1);
return (0);
}

int IsDownBar(int ai_0) {
if (Close[ai_0] < Open[ai_0]) return (1);
return (0);
}


//=============================
// Закрывает все бай ордера с MagicNumber по текущему инструменту
void CloseAllBuyTrades() {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber))
if (OrderType() == OP_BUY)
//OrderClose( OrderTicket(), OrderLots(), Bid, SlippageClose);
{
RefreshRates();
for(int try = 1; try <= MaxTry; try++)
if (!OrderClose( OrderTicket(), OrderLots(), Bid, SlippageClose))
{ Print("Ошибка ", GetLastError());
Print("Не удалось закрыть ордер, попытка ", try);
Sleep(1000);
RefreshRates();
}
else
break;
}
}

}

//=============================
// Закрывает все продажные ордера с MagicNumber по текущему инструменту
void CloseAllSellTrades() {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber))
if (OrderType() == OP_SELL)
// OrderClose( OrderTicket(), OrderLots(), Ask, SlippageClose);
{
RefreshRates();
for(int try = 1; try <= MaxTry; try++)
if (!OrderClose( OrderTicket(), OrderLots(), Ask, SlippageClose))
{ Print("Ошибка ", GetLastError());
Print("Не удалось закрыть ордер, попытка ", try);
Sleep(1000);
RefreshRates();
}
else
break;
}
}

}


//=============================
// Считает открытые ордера с MagicNumber по текущему инструменту, в штуках.
int CountTrades() {
int Result = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber))
if (OrderType() == OP_SELL || OrderType() == OP_BUY) Result++;
}
return (Result);
}


//=============================

// Считает открытые ордера с MagicNumber по текущему инструменту, в штуках.
//void TrailOrders() {
// if (Trail)
// for (int i = OrdersTotal() - 1; i >= 0; i--) {
// OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
// if (OrderSymbol() == Symbol() && (OrderMagicNumber() == MagicNumber))
// if (OrderType() == OP_SELL )
// {
// if (NormalizeDouble(OrderStopLoss(), Digits) != NormalizeDouble(GetTrailedSellStop(),Digits)){
// Print( "SELL SL =" + GetTrailedSellStop());
// OrderModify(OrderTicket(),OrderOpenPrice(),GetTrai ledSellStop(),OrderTakeProfit(),0,Red);
// }
// }
// if (OrderType() == OP_BUY)
// {
// if (NormalizeDouble(OrderStopLoss(), Digits)!= NormalizeDouble(GetTrailedBuyStop(),Digits)){
// Print( "BUY SL =" + GetTrailedBuyStop());
// OrderModify(OrderTicket(),OrderOpenPrice(),GetTrai ledBuyStop(),OrderTakeProfit(),0,Blue);
// }
// }
//}
//}



void updateBuffs(){
for (int i = 5; i > 0; i--) {
g_ibuf_0[i] = g_ibuf_0[i-1];
g_ibuf_1[i] = g_ibuf_1[i-1];
g_ibuf_2[i] = g_ibuf_2[i-1];
g_ibuf_3[i] = g_ibuf_3[i-1];
g_ibuf_4[i] = g_ibuf_4[i-1];
g_ibuf_5[i] = g_ibuf_5[i-1];
}
g_ibuf_0[0] = iCustom(NULL, 0, "indicator02",0,1);
g_ibuf_1[0] = iCustom(NULL, 0, "indicator02",1,1);
g_ibuf_2[0] = iCustom(NULL, 0, "indicator02",2,1);
g_ibuf_3[0] = iCustom(NULL, 0, "indicator02",3,1);
g_ibuf_4[0] = iCustom(NULL, 0, "indicator02",4,1);
g_ibuf_5[0] = iCustom(NULL, 0, "indicator02",5,1);
}


void updateBuffs2(){
for (int i = 5; i >= 0; i--) {
g_ibuf_0[i] = iCustom(NULL, 0, "indicator02",0,i);
g_ibuf_1[i] = iCustom(NULL, 0, "indicator02",1,i);
g_ibuf_2[i] = iCustom(NULL, 0, "indicator02",2,i);
g_ibuf_3[i] = iCustom(NULL, 0, "indicator02",3,i);
g_ibuf_4[i] = iCustom(NULL, 0, "indicator02",4,i);
g_ibuf_5[i]= iCustom(NULL, 0, "indicator02",5,i);
}
}


//++buy sell magic ea
///////==================
int BuySignal(){
double Result = iCustom(NULL, 0, "indicator02",2,1);
if ((Result == EMPTY_VALUE)||(Result == -1))
return (0);
return (1);
//if return (Result);
}

int SellSignal(){
double Result = iCustom(NULL, 0, "indicator02",3,1);
if ((Result == EMPTY_VALUE)||(Result == -1))
return (0);
return (1);
}

double GetBuyStopInitial(){
return (NormalizeDouble(Low[2] - SL * gd_152, Digits));
}

double GetSellStopInitial(){
return (NormalizeDouble(High[2] + SL * gd_152, Digits));
}

double GetTrailedBuyStop(){
double d = iCustom(NULL, 0, "indicator02",0,1);
return (NormalizeDouble( d, Digits));
}

double GetTrailedSellStop(){
double d = iCustom(NULL, 0, "indicator02",1,1);
return (NormalizeDouble( d, Digits));
}
chillm вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 13:52   #1296 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Да-уж.
Начинать обучение программированию с правки декомпила, это круто...
Не проще-ли написать что-то самому? И для начала попроще...
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 13:59   #1297 (permalink)
Активный участник
 
Аватар для chillm
 
Регистрация: 27.04.2013
Сообщений: 175
Репутация: 74
chillm
Сказал(а) спасибо: 146
Поблагодарили 73 раз(а) в 37 сообщениях
Поинты: 122
Сообщение от AlexeyVik Посмотреть сообщение
Да-уж.
Начинать обучение программированию с правки декомпила, это круто...
Не проще-ли написать что-то самому? И для начала попроще...
Я не хочу стать программистом, а лишь немного научиться для того, чтобы в таких моментах как этот, мог бы изменить то что мне нужно. Надеюсь здесь есть добрые люди, которым точно не составит труда внести в него изменения, и возможно даже настолько добрые, что опубликуют его здесь.

Немного скажу про этот советник.. Использует индикатор бай-селл меджик, это стрелки тренда. Как только открывается стрелка в бай или сел он сразу же открывает сделку по нему, а как тренд меняется закрывает сделку, и открывает в другом направлении. У меня есть очень много идей как доработать его, я его уже скрестил с тралл-советником.
Кому интересно вот индикатор и сам советник.
Вложения:
Тип файла: mq4 indicator02.mq4 (6.6 Кб, 27 просмотров)
Тип файла: ex4 indicator02.ex4 (8.9 Кб, 14 просмотров)
Тип файла: mq4 vBuySellSMagicEA_v1_00.mq4 (9.9 Кб, 28 просмотров)
chillm вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 15:13   #1298 (permalink)
Программист mql4 mql5
 
Аватар для AlexeyVik
 
Регистрация: 19.11.2009
Сообщений: 2,516
Репутация: 3643
AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik AlexeyVik
Сказал(а) спасибо: 1,109
Поблагодарили 3,647 раз(а) в 1,468 сообщениях
Поинты: 2002
Сообщение от chillm Посмотреть сообщение
Я не хочу стать программистом,
Ты программистом можешь и не быть... Но для чтения и правки чужого кода надо этот код понимать. А понять можно только научившись программированию, ну хотя-бы на самом начальном уровне. Понимать, что открыть ордер можно командой OrderSend() и какие в неё параметры в какой последовательности вносятся. А закрыть ордер OrderClose()... Ну и остальные самые необходимые понятия, например то, что после каждой строки надо ставить точку с запятой ;

А вот что касается добрых людей, то в этом ты прав. Меня тоже можно к ним отнести. Я ведь трачу своё время на диалог с тобой совершенно бескорыстно.
Ведь дело не в нежелании помочь тебе... Дело в нежелании читать декомпилированный код и разбираться что в нём где и зачем.
В общем не взыщи.

ps: И кстати, твои слова "Он очень простой" абсолютно не совместимы с таким количеством строк кода.
Если-бы ты на начальном уровне выучил программирование, то такого не сказал-бы.

Последний раз редактировалось AlexeyVik; 05.06.2013 в 15:16.
AlexeyVik на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 20:37   #1299 (permalink)
◅ ♛ ♠ ♣ ♥ ♦ ♛ ▻
 
Аватар для tommy27
 
Регистрация: 16.10.2011
Адрес: Новосибирск
Сообщений: 1,054
Репутация: 3189
tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27 tommy27
Сказал(а) спасибо: 2,326
Поблагодарили 3,184 раз(а) в 875 сообщениях
Поинты: 570
Отправить сообщение для tommy27 с помощью Skype™
Здравствуйте, помогите решить такую проблему: хочу чтоб в одном индикаторе отображались евробакс, индекс доллара и индекс евро, ток значения у них отличаются на несколько порядков. Как привести их к значениям одного порядка? Просто множители добавить - думаю не по феншую как то...

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
puretrade.ru
tommy27 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 05.06.2013, 21:34   #1300 (permalink)
Почётный гражданин
 
Аватар для Rolandoz
 
Регистрация: 02.05.2012
Адрес: Прибалтика
Сообщений: 444
Репутация: 413
Rolandoz - Rolandoz - Rolandoz - Rolandoz - Rolandoz -
Сказал(а) спасибо: 985
Поблагодарили 412 раз(а) в 221 сообщениях
Поинты: 262
Сообщение от chillm Посмотреть сообщение
... он сразу же открывает сделку по нему, а как тренд меняется закрывает сделку, и открывает в другом направлении..
зачем его тогда надо менять..??? Могу Вас только поздравить - через месяц-два Вы станете мульенером...( и еще раз - не меняйте ничего)


П.С. извините - не смог сдержатся.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Лучше неуклюже танцевать, чем ходить, прихрамывая. Ф.Ницше
When you find yourself in a hole, the first thing to do is stop digging. Will Rogers
Rolandoz вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 17:58. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO