АвторСообщение



Сообщение: 6
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 16.10.14 08:37. Заголовок: Помогите еще раз дорогой мастер?!


Добрый день уважаемый Игорь! Я еще к вам по просьбу. Короче, есть индикатор корреляции и его коде использован формулу типа FastMA - SlowMA, но я хотел изменить его на FastMA / SlowMA. Сам попробовал но ни как не получилось(в принципе похоже элементарно легкий но у меня не получилось). Пожалуйста, покажите как заменит формулу?!

Вот индикатор: http://file.qip.ru/arch/ZHX5cSTK/Correlations.html или http://qclk.ru/kF/Rm2b

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 61 , стр: 1 2 3 4 5 All [только новые]







Сообщение: 844
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 16.10.14 20:36. Заголовок: Во-первых, в индикат..


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


 цитата:
if(ModeXPrice)



так:

 цитата:
double denom1 = iClose(Symbol1Name,0,1);
double denom2 = iClose(Symbol2Name,0,1);
double denom3 = iClose(Symbol3Name,0,1);

if (denom1 == 0 || denom2 == 0 || denom3 == 0)
return (0);

kPrice1=1/denom1*iClose(Symbol1Name,0,1);
kPrice2=1/denom2*iClose(Symbol1Name,0,1);
kPrice3=1/denom3*iClose(Symbol1Name,0,1);



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

Для изменения формулы необходимо знак "-" при МА заменить на знак "/". Только не забыть перед этим осуществить проверку деления на ноль следующим образом:

 цитата:
double ma1 = iMA(Symbol1Name,Period(),MASlow,0,MAMethod,MAPrice,i);
double ma2 = iMA(Symbol2Name,Period(),MASlow,0,MAMethod,MAPrice,i);
double ma3 = iMA(Symbol3Name,Period(),MASlow,0,MAMethod,MAPrice,i);

if (ma1 == 0 || ma2 == 0 || ma3 == 0)
continue;



Этот код нужно вставить сразу в начале цикла.

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

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 7
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 17.10.14 06:47. Заголовок: Scriptong пишет: ..



 цитата:
Scriptong пишет:


Спасибо большое, очень понятно и ясно!!!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 847
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 17.10.14 16:54. Заголовок: Пожалуйста. Обращайт..


Пожалуйста. Обращайтесь.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 8
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 02.11.14 21:35. Заголовок: Scriptong пишет: По..


Scriptong пишет:

 цитата:
Пожалуйста. Обращайтесь.


Добрый вечер мой дорогой преподаватель! Еще к вам по просьбами обращаю. Пробовал написать советник работающие по мартингейлу, но не получилось корректировать порядочности открывание ордеры. Правила стратегии советника такого:
Откроется 1 ордер на продажу с SL 10 и TP 10 пункта.
Если сработал TP, тогда повторяется первый шаг.
Если сработал SL, тогда откроем противоположный ордер(покупка) с SL 20 и TP 20 пунктам.
Если сработал опять SL, теперь откроем тоже противоположный ордер(продажа) с SL 30 и TP 30 пунктам.
Этот цикл продолжается до срабатывание TP и потом повторяется первый шаг.
Здесь проблема только с открывание противоположный ордеры после стоп лосса и повторение первый шаг после тейкпрофита. Пожалуйста, помогите с кодом?!
Заранее спасибо большое!!!
Вот и сам советник: http://qclk.ru/k6/57gs или http://file.qip.ru/arch/ZxPS-Tfc/EA.html


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 914
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 03.11.14 19:52. Заголовок: Добрый вечер. В Ваш..


Добрый вечер.

В Вашем коде есть такие замечательные функции, как FindLastHistoryOrderParameter и ей подобные. Но тем не менее, в коде Вы повторяете их функционал. Зачем?
Всего то нужно:
1. Определить величину профита последнего ордера в истории. Это лучше сделать через тикет:

 цитата:
int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket");
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
return 0;



2. Если профит положительный, то открыть ордер с SL 10 и TP 10.

 цитата:
if (OrderProfit > 0)
{
OrderSend(Symbol(), <тип ордера>, FixedLots, Bid, Slippage* PipValue, <10 пп. стопа>, <10 пп. профита>, NameEA + CurTime(),MAGIC_NUM, 0, Red);
}


3. Если профит отрицательный, то посмотреть, какой размер профита/стопа был у последнего закрытого ордера. К этой величине добавить 10 и открыть новый ордер.

 цитата:
else
{
double slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point;
double tpSize = slSize;
Sloss = Bid <или Ask> + <или -> slSize;
Tprof = Bid <или Ask> + <или -> tpSize;
OrderSend(...);
}



Вот и все.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 9
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 03.11.14 23:12. Заголовок: Спасибо большое, но ..


Спасибо большое, но почему то не работает?!
Там проблема не с ТП или СЛ, а открытие противоположный ордеры по очереди(если сработал СЛ продажу тогда открываем покупку).
Сделал так:
//----------------------------------------------------------------------------------------------------------------------------//

int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket");
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
return 0;

if (OrderProfit() > 0 && StartWithBuy )
{
if(StopLoss == 0){Sloss = 0;} else{
Sloss = Ask - 10* PipValue * Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Bid + 10* PipValue * Point;}
int Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");OrderTime=Time[0];
}
else if(OrderType()==OP_BUY)
{
double slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
double tpSize = slSize;
Sloss = Bid + slSize;
Tprof = Ask - tpSize;
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}
if (OrderProfit() > 0 && StartWithSell )
{
if(StopLoss == 0){Sloss = 0;}else{
Sloss = Bid + 10 * PipValue* Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Ask - 10 * PipValue* Point;}
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Bid, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Red);
prtAlert("Selling");OrderTime=Time[0];
}
else if(OrderType()==OP_BUY)
{
slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
tpSize = slSize;
Sloss = Ask - slSize;
Tprof = Bid + tpSize;
Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 919
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 04.11.14 19:25. Заголовок: Husanboy пишет: Там..


Husanboy пишет:

 цитата:
Там проблема не с ТП или СЛ, а открытие противоположный ордеры по очереди(если сработал СЛ продажу тогда открываем покупку).


Вместе с проверкой прибыльности Вы зачем-то проверяете значение параметра StartWithBuy. Для какой цели? Ведь нужно проверять тип закрытого ордера, и открывать противоположный ему:

 цитата:
if (OrderProfit > 0)
{
if (StartWithBuy)
{
// открыть Buy с профитом/стопом 10
}
else
{
// открыть Sell с профитом/стопом 10
}
}
else
{
if (OrderType() == OP_BUY)
{
// открыть Sell с увеличенными профитом/стопом
}
else
{
// открыть Buy с увеличенными профитом/стопом
}
}



Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 10
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 04.11.14 22:38. Заголовок: Scriptong пишет: Вм..


Scriptong пишет:

 цитата:
Вместе с проверкой прибыльности Вы зачем-то проверяете значение параметра StartWithBuy. Для какой цели? Ведь нужно проверять тип закрытого ордера, и открывать противоположный ему:

цитата:
if (OrderProfit > 0)
{
if (StartWithBuy)
{
// открыть Buy с профитом/стопом 10
}
else
{
// открыть Sell с профитом/стопом 10
}
}
else
{
if (OrderType() == OP_BUY)
{
// открыть Sell с увеличенными профитом/стопом
}
else
{
// открыть Buy с увеличенными профитом/стопом
}
}



Извиняюсь?! Опять не получилось(не откроется ни какого ордера)!

//----------------------------------------------------------------------------------------------------------------------------//
int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket");
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
{
if (OrderProfit() > 0 )
{
if(StartWithBuy)
{
if(StopLoss == 0){Sloss = 0;} else{
Sloss = Ask - 10* PipValue * Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Bid + 10* PipValue * Point;}
int Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");OrderTime=Time[0];
}
else
{
if(StopLoss == 0){Sloss = 0;}else{
Sloss = Bid + 10 * PipValue* Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Ask - 10 * PipValue* Point;}
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Bid, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Red);
prtAlert("Selling");OrderTime=Time[0];
}
}
else
{
if (OrderType() == OP_BUY)
{
double slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
double tpSize = slSize;
Sloss = Bid + slSize;
Tprof = Ask - tpSize;
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}
else
{
slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
tpSize = slSize;
Sloss = Ask - slSize;
Tprof = Bid + tpSize;
Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}
}
}
//===================================================================================================//


Для легкости понимание удаляем из кода StartWithBuy.

Теперь начнем с началу:
- Сразу после запуск советника откроем одна ордер на покупку(Buy) с 10п ТП и СЛ;
- Если сработал ТП тогда откроем ордер на покупка(Buy) тоже с 10п ТП и СЛ(то есть каждый раз после срабатывание ТП повторяется первый шаг);
- Если сработал СЛ тогда откроем противоположный ордер то есть продажу(Sell) с 20п(удвоенным) ТП и СЛ;
- Если опять сработал СЛ, теперь тоже откроем противоположный ордер(Buy) с удвоенным ТП и СЛ;
- Если теперь сработал ТП тогда повторяется первый шаг(не зависимо на типу последного ордера откроем ордер на покупку с начальном ТП и СЛ);
Пожалуйста, еще раз помогите с кодам?!


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 920
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 05.11.14 18:05. Заголовок: Husanboy пишет: Изв..


Husanboy пишет:

 цитата:
Извиняюсь?! Опять не получилось(не откроется ни какого ордера)!


Конечно, не откроется. Откроется только в том случае, если не получилось выбрать ордер. Именно такое условие Вы поставили в начало блока:

 цитата:
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))


Читается так: если НЕ удалось выбрать ордер с тикетом lastTicket, то выполнить следующее. Там, где я в примерах использовал такую конструкцию, после условия следовал оператор:

 цитата:
return (0);


то есть выход из обработки тика. Таким образом, Вам нужно обрабатывать ситуацию, когда выбран ордер.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 11
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 05.11.14 20:54. Заголовок: Scriptong пишет: Ко..


Scriptong пишет:

 цитата:
Конечно, не откроется. Откроется только в том случае, если не получилось выбрать ордер. Именно такое условие Вы поставили в начало блока:

цитата:
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))


Читается так: если НЕ удалось выбрать ордер с тикетом lastTicket, то выполнить следующее. Там, где я в примерах использовал такую конструкцию, после условия следовал оператор:

цитата:
return (0);


то есть выход из обработки тика. Таким образом, Вам нужно обрабатывать ситуацию, когда выбран ордер.



Да сначала поставил это как вы написали(if (!OrderSelect(lastTicket, SELECT_BY_TICKET)) return 0; ), но все равно не открылся ордер и потом удалял эту из кода и опять не работал.
Вот сделал так, но все равно не работает:

 цитата:
int lastTicket = FindLastHistoryOrderParameter(MAGIC_NUM, "ticket");
if (!OrderSelect(lastTicket, SELECT_BY_TICKET))
return (0);
if(OrderProfit() > 0)
{
if(StartWithBuy)
{
if(StopLoss == 0){Sloss = 0;} else{
Sloss = Ask - 10* PipValue * Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Bid + 10* PipValue * Point;}
int Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");OrderTime=Time[0];
}
else
{
if(StopLoss == 0){Sloss = 0;}else{
Sloss = Bid + 10 * PipValue* Point;}
if(TakeProfit == 0){Tprof = 0;}else{
Tprof = Ask - 10 * PipValue* Point;}
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Bid, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Red);
prtAlert("Selling");OrderTime=Time[0];
}
}
else if ( OrderType() == OP_BUY)
{
double slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
double tpSize = slSize;
Sloss = Bid + slSize;
Tprof = Ask - tpSize;
Tiket= OrderSend(Symbol(), OP_SELL, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}
else
{
slSize = MathAbs(OrderStopLoss() - OrderOpenPrice()) + 10 * Point* PipValue;
tpSize = slSize;
Sloss = Ask - slSize;
Tprof = Bid + tpSize;
Tiket= OrderSend(Symbol(), OP_BUY, FixedLots, Ask, Slippage* PipValue, Sloss, Tprof, NameEA + CurTime(),MAGIC_NUM, 0, Green);
prtAlert("Buying");
}



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 925
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 06.11.14 21:31. Заголовок: Husanboy пишет: Вот..


Husanboy пишет:

 цитата:
Вот сделал так, но все равно не работает:


Приведите весь код, пожалуйста - закачайте mq4 файл на dropmefiles.com или любой другой файловый сервер.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 12
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 07.11.14 04:54. Заголовок: Scriptong пишет: dr..


Scriptong пишет:

 цитата:
dropmefiles.com



Пожалуйста: http://dropmefiles.com/DPETz

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 931
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 2
ссылка на сообщение  Отправлено: 07.11.14 21:13. Заголовок: Husanboy пишет: Пож..


Husanboy пишет:

 цитата:
Пожалуйста: http://dropmefiles.com/DPETz


Что-то перепутали. По ссылке расположен эксперт ЕА, но кода в нем, по сути то и нет. Только то, что автоматически сгенерировал мастер Meta Editor.

Спасибо: 1 
ПрофильЦитата Ответить



Сообщение: 13
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 08.11.14 15:39. Заголовок: Scriptong пишет: Чт..


Scriptong пишет:

 цитата:
Что-то перепутали. По ссылке расположен эксперт ЕА, но кода в нем, по сути то и нет. Только то, что автоматически сгенерировал мастер Meta Editor.




Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 14
Зарегистрирован: 20.02.14
Репутация: 0
ссылка на сообщение  Отправлено: 08.11.14 21:14. Заголовок: Все получилось! Сам ..


Все получилось! Сам поправил и это работает. Но теперь появилось другого просьба к вам - как прописать в советнике, чтобы закрытие сделок при работе на реальных счетах отображалось так же, как при визуальном тестировании (стрелками и пунктиром, соединяющим точки открытия и закрытия ордеров)?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 61 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 21
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет