PDA

View Full Version : Уважаемые программисты, посмотрите пожалуйста



v2812
31-01-2011, 07:55
Советник не открывает сделки.
Уважаемые программисты посмотрите пожалуйста код, не могу добиться , что бы советник правильно открывал сделки (по стрелкам). Живёт какой то своей жизнью! Я уже перепробовала все, что могла, но моих знаний явно не хватает.:( Я только начала изучать mql.
Я прикрепила и индикатор дивергенции с которыми работает советник, он, почему-то не видит некоторые важные вершины. Посмотрите, пожалуйста!
С Уважением,
Елена

Scriptong
31-01-2011, 08:53
Не могу понять, что именно вы хотели получить. Но сразу же можно указать на одну ошибку - вы пытаетесь привязать торговлю к объектам, которые создает индикатор Div_cc_on_array. Это изначально неправильно, т.к. пользователь может удалить эти объекты или просто отключить их использование в индикаторе. В тестере стратегий (без визуализации) вообще непонятно, на что можно рассчитывать, т.к. реально объекты не создаются (не на чем).
То есть вам перед поиском других ошибок нужно решить проблему сигналов, которые не привязаны к графическим объектам. Пути решения здесь два:
1) Реализовать в советнике алгоритм расчета объектов, заложенный в Div_cci_on_array. Тогда использование индикаторов не понадобится. Советник сам будет рассчитывать сигналы.
2) Осуществить привязку к буферам индикатора (у индикатора есть стрелки - не графические объекты). В этом случае вы не зависите от того, прикреплен индикатор к графику или нет. Зависимость касается лишь присутствия файла индикатора в папке терминала.

v2812
31-01-2011, 09:56
Не могу понять, что именно вы хотели получить. Но сразу же можно указать на одну ошибку - вы пытаетесь привязать торговлю к объектам, которые создает индикатор Div_cc_on_array. Это изначально неправильно, т.к. пользователь может удалить эти объекты или просто отключить их использование в индикаторе. В тестере стратегий (без визуализации) вообще непонятно, на что можно рассчитывать, т.к. реально объекты не создаются (не на чем).
То есть вам перед поиском других ошибок нужно решить проблему сигналов, которые не привязаны к графическим объектам. Пути решения здесь два:
1) Реализовать в советнике алгоритм расчета объектов, заложенный в Div_cci_on_array. Тогда использование индикаторов не понадобится. Советник сам будет рассчитывать сигналы.
2) Осуществить привязку к буферам индикатора (у индикатора есть стрелки - не графические объекты). В этом случае вы не зависите от того, прикреплен индикатор к графику или нет. Зависимость касается лишь присутствия файла индикатора в папке терминала.

Спасибо Вам за ответ!
А можно Вас спросить на счет второго пути - как именно привязать сигналы к буферам индикатора. Я пробовала - но советник почему-то не видит этих буферов.... Открывает сделки в произвольном виде... Поэтому и переделала индикатор, чтобы он рисовал объекты на графике.

v2812
31-01-2011, 12:07
Не могу понять, что именно вы хотели получить. Но сразу же можно указать на одну ошибку - вы пытаетесь привязать торговлю к объектам, которые создает индикатор Div_cc_on_array. Это изначально неправильно, т.к. пользователь может удалить эти объекты или просто отключить их использование в индикаторе. В тестере стратегий (без визуализации) вообще непонятно, на что можно рассчитывать, т.к. реально объекты не создаются (не на чем).

Еще вопрос - у меня есть индикатор, который рисует стрелки по дивергенции в отдельном окне и данные берет из буфера. А по нему можно советника сделать? Я пробовала - он не реагирует на функцию iCustom...
Помогите, пожалуйста, я в программировании "что-то близкое к нулю"...

Scriptong
02-02-2011, 08:59
В справке MQL4 по функции iCustom указано, что входные параметры индикатора могут быть частично или полностью пропущены. Лично мне подобный механизм не очень понятен. Поэтому предпочитаю указывать полный список входных параметров индикатора, чего и вам советую.

Для получения значения "стрелки вверх":


double Up = iCustom(NULL, 0, "+Div cci on array+", "*** CCI-OnArray Settings ***", 9, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1)

Первые два параметра - инструмент и таймфрейм. Я указал текущие (NULL и 0). Третий параметр - наименование индикатора. Далее идет перечисление параметров вызова индикатора в полном соответствии с последовательностью, указанной в коде индикатора (в коде индикатора указаны как extern). Предпоследний параметр - номер буфера, значение которого нас интересует. 0 - это буфер bullishDivergence (см. код индикатора +Div cci on array+). 1 - номер бара, значение индикатора на котором мы хотим получить.

Для получения значения "стрелки вниз":


double Down = iCustom(NULL, 0, "+Div cci on array+", "*** CCI-OnArray Settings ***", 9, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 1, 1)

Факт отсутствия/наличия стрелки проверяется так:

if (Up == EMPTY_VALUE)
{
// стрелка вверх отсутствует
}
else
{
// есть стрелка вверх
}

Аналогично для стрелки вниз.

v2812
02-02-2011, 09:06
В справке MQL4 по функции iCustom указано, что входные параметры индикатора могут быть частично или полностью пропущены. Лично мне подобный механизм не очень понятен. Поэтому предпочитаю указывать полный список входных параметров индикатора, чего и вам советую.

Для получения значения "стрелки вверх":


double Up = iCustom(NULL, 0, "+Div cci on array+", "*** CCI-OnArray Settings ***", 9, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1)

Первые два параметра - инструмент и таймфрейм. Я указал текущие (NULL и 0). Третий параметр - наименование индикатора. Далее идет перечисление параметров вызова индикатора в полном соответствии с последовательностью, указанной в коде индикатора (в коде индикатора указаны как extern). Предпоследний параметр - номер буфера, значение которого нас интересует. 0 - это буфер bullishDivergence (см. код индикатора +Div cci on array+). 1 - номер бара, значение индикатора на котором мы хотим получить.

Для получения значения "стрелки вниз":


double Down = iCustom(NULL, 0, "+Div cci on array+", "*** CCI-OnArray Settings ***", 9, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 1, 1)

Факт отсутствия/наличия стрелки проверяется так:

if (Up == EMPTY_VALUE)
{
// стрелка вверх отсутствует
}
else
{
// есть стрелка вверх
}

Аналогично для стрелки вниз.

Большое спасибо за ответ.
Я действительно писала раньше "сокращенный вариант" на функцию iCustom. Попробую сделать как Вы написали.
Еще вопрос - может быть, вставить расчет дивергенции в сам советник? или это слишком его утяжелит?
Еще раз спасибо Вам за помощь и советы!

v2812
02-02-2011, 09:33
Прописала как вы посоветовали, но советник сделки всё равно не открывает, а в журнале пишет: "2 parameter for SetIndexBuffer function must be array" , что это может значить?
Насколько я понимаю у меня все буферы и так прописаны как array...

Scriptong
02-02-2011, 09:56
а в журнале пишет: "2 parameter for SetIndexBuffer function must be array" , что это может значить?


В советнике не могут использоваться функции SetIndexBuffer, SetIndexArrow и т.п. Они используются в коде индикатора. Уберите их из кода советника.

v2812
02-02-2011, 10:09
В советнике не могут использоваться функции SetIndexBuffer, SetIndexArrow и т.п. Они используются в коде индикатора. Уберите их из кода советника.

А у меня нет этих функций в советнике! Откуда он может их брать?

v2812
02-02-2011, 14:47
Очень Вас прошу - помогите с советником, мне всего и надо чтобы по зеленой стрелке открывался бай, а по красной - селл. Пожалуйста, я больше недели уже с ним мучаюсь и никак не получается....

PS Я также прилагаю индикатор - в нем исправила ошибку с буферами, и теперь он рисует стрелки в основном окне и не объектами.


//+------------------------------------------------------------------+
//| Советник 1.mq4 |
//| Copyright © 2011, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+

extern double TakeProfit = 200;
extern double Lots = 0.1;
extern double Stoploss = 100;
extern int MA=12;
extern int mode =3;
extern int price=5;
extern int CCI=25;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total, i;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility

double Up = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25, "*** Indicator Settings ***",
false, false, false, 0, 1);

if (Up != 0)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-Stoploss*Point,Ask+TakeProfit*Point,"sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
} else return;

// check for short position (SELL) possibility

double Down = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25,
"*** Indicator Settings ***", false, false, false, 1, 1);

if (Down!=0)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+Stoploss*Point,Bid-TakeProfit*Point,"sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
} else return;
}



return(0);
}
// the end.

sergey33
03-02-2011, 04:10
доброго здоровья.помогите исправить советник.надо чтобы при закрытии ордеров сов ждал заданный отступ от ма.а не использовал это условие только при включении

v2812
04-02-2011, 05:38
Всё, разобралась! Всё работает!!! Спасибо большое за помощь и удачи!!!

Scriptong
04-02-2011, 08:26
доброго здоровья.помогите исправить советник.надо чтобы при закрытии ордеров сов ждал заданный отступ от ма.а не использовал это условие только при включении

Так поставьте условие проверки отступа от МА:

(Ma-Bid>=otstup*Point || Bid-Ma>=otstup*Point)
в условие, которое следует перед вызовом функции закрытия close_working:

if(profitall()>0 &&
((KolOpenOrder(1)>1 &&KolOpenOrder(2)==1)||(KolOpenOrder(2)>1 &&KolOpenOrder(1)==1)))

sergey33
04-02-2011, 18:44
спасибо.я попробую.лишь бы не перемудрить и найти что куда вписать.

Scriptong
06-02-2011, 11:49
спасибо.я попробую.лишь бы не перемудрить и найти что куда вписать.

Если вы программируете на MQL4, то это будет очень просто. Если же вы с программированием не сталкивались, то вам может только повезти при вставке строки.

P.S. При постановке задач, пожалуйста, указывайте ваш уровень притязаний. Слово "помочь" я расцениваю как "подсказать", каким способом можно осуществить то или иное действие. В таком случае я предполагаю, что человек имеет хоть какой-нибудь опыт программирования. В случае отсутствия опыта программирования пишите "сделайте".

sergey33
06-02-2011, 22:00
Доброй ночи.С Вами приятно общаться.Я обязательно попробую разобраться.Мне очень
понравился написанный Вами индикатор Tick Counter_ver3.В верхнем углу терминала есть надпись "количество тиков..........0.Пожалуйста сделайте чтобы они действительно писались(у меня при работе всегда 0 в обоих строках),и рядом количество тиков прошедшей свечи.Я наверно много прошу.

sergey33
07-02-2011, 13:29
Добрый вечер. Исправьте советник.надо чтобы при закрытии ордеров сов ждал заданный отступ от ма.а не использовал это условие только при включении. у меня не получается.компилятор показывает 0 шибок,но он и не работает.

Scriptong
09-02-2011, 11:13
В верхнем углу терминала есть надпись "количество тиков..........0.Пожалуйста сделайте чтобы они действительно писались(у меня при работе всегда 0 в обоих строках),и рядом количество тиков прошедшей свечи.Я наверно много прошу.

Есть такая ошибочка. Исправил в четвертой версии. Также добавил отображение информации за предыдущий бар. Тем не менее, вы всегда можете пользоваться показаниями индикатора в нижней части графика. Там собирается история за все время работы индикатора.

sergey33
09-02-2011, 18:47
спасибо за ваш труд.

garanyan1985
18-06-2011, 08:40
Скажите пожалуйста скорее всего этот индикатор pf01 рисует стрелки. Как отразить в программном коде, чтобы в зависимости от этого открывались сделки?
http://forums.forextrade.ru/showthread.php?p=33600#post33600

Scriptong
19-06-2011, 20:26
Скажите пожалуйста скорее всего этот индикатор pf01 рисует стрелки. Как отразить в программном коде, чтобы в зависимости от этого открывались сделки?
http://forums.forextrade.ru/showthread.php?p=33600#post33600

Так где индикатор то? По ссылке только советник.