Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нужна помощь с функцией iCustom для этого советника можно вызвать пользовательский индикатор.
Привет всем,
Я хотел бы добавить этот (Entry.mq4) инди в этот (swb grid 4.1.0.3_EA) советник с
iCustom, чтобы я и мы могли использовать этот индикатор в стратегии советника.
Советник уже использует 3 индикатора MT4 Bollinger Bands, Stochastic и RSI и имеет
переключатели, так что вы можете выбрать любой из них или все они будут использоваться, выбрав TRUE или FALSE.
и я хотел бы добавить этот 4-й индикатор (Entry.mq4) к советнику.
Буду очень признателен, если кто-нибудь сможет мне помочь.
спасибо.
советник и инди прикреплены ниже.
Нужна помощь новичку в MQL4, чтобы понять этот массив
Привет, кодеры
Не мог бы кто-нибудь просветить меня по массивам немного.
Или, возможно, у меня больше проблем с пониманием этого цикла, поскольку он относится к этому массиву.
#property copyright "Unfinished POS by Agent86"
double v1[];
double v2[];
double val1;
double val2;
int start()
{
while(i>=0)
{
val1=iFractals(NULL, 0, MODE_UPPER,i);
if (val1 > 0)
{
v1=High;
}
else
{
v1=v1;
}
val2=iFractals(NULL, 0, MODE_LOWER,i);
if (val2 > 0)
{
v2=Low;
}
else v2=v2;
i--;
}
return(0);
}
Это базовый фрактал, но я не могу сослаться ни на один элемент массива.
Я хочу иметь возможность как-то увеличивать i++ и Print (v1); или печатать предыдущее значение перед 0 или EMPTY_VALUE.
Если я вообще иду в правильном направлении с этим.
У меня проблемы.
Print (v1): всегда == 0 и печатает 0.
Я вроде как понимаю, потому что на самом деле цикл доходит до -1, что == 0.
Как и где я могу разместить операторы Print, чтобы я мог видеть, что происходит?
Я пробовал множество методов и повторно инициализировал i=0, чтобы попытаться чередовать цикл, чтобы я мог ссылаться на элементы v1, но все попытки провалились.
В основном я хочу просмотреть предыдущие фракталы или отметить их как A high, B low и т.д. для возможного будущего использования в ABCD схеме типа советника.
На данный момент, в основном, я хочу распечатать v1, чтобы я мог видеть, что он делает.
Возможно, я мог бы разработать что-то для выбора предыдущего фрактала, например, A_high и/или B_low или какую-то подобную схему.
Может быть, я иду по неверному пути?
Пожалуйста, посоветуйте.
Спасибо
Я бы выбрал цикл FOR. Циклы While могут привести к блокировке, если вы забудете включить i--. Поскольку вы знаете точное количество баров, его проще использовать, к тому же i никогда не будет < 0. Это поможет избежать путаницы.
For (int i=Bars-1;i>0;i--) {
// код
}
Попробуйте установить все значения массива в 0, затем вернитесь назад и присвойте значения индикаторам. Также попробуйте выполнить print() непосредственно после присвоения значения индикатора. Посмотрите, возвращает ли она вообще что-нибудь.
По моему мнению, лучше всего присвоить массиву размер. Скажем, 1000 позиций. Вряд ли вам понадобится так много, к тому же это сократит количество выполняемых вами вычислений. Все, что вам нужно сделать, это просмотреть последние 999 баров до 0 и присвоить значения. Я припоминаю, что у MT4 есть проблемы с инициализацией массивов и тому подобное.
Вопросы по массивам
Я бы выбрал цикл FOR. Циклы While могут привести к блокировке, если вы забудете включить i--. Поскольку вы знаете точное количество баров, его проще использовать, плюс i никогда не будет < 0. Это поможет избежать путаницы.
For (int i=Bars-1;i>0;i--) {
// код
}
Попробуйте установить все значения массива в 0, а затем вернуться назад и присвоить значения индикаторов. Также попробуйте выполнить print() непосредственно после присвоения значения индикатора. Посмотрите, возвращает ли она вообще что-нибудь.
Лучше всего, на мой взгляд, задать размер массива. Скажем, 1000 позиций. Вряд ли вам понадобится столько, к тому же это уменьшит количество вычислений, которые вы делаете. Все, что вам нужно сделать, это просмотреть последние 999 баров до 0 и присвоить значения. Я припоминаю, что у MT4 есть проблемы с инициализацией массивов и тому подобное.Хорошо, спасибо, я попробую.
Хотя операторы while работают хорошо, это не помогает мне получить элементы массива, которые я хочу распечатать / просмотреть и т.д.
Я поработаю над тем, что вы сказали, проведу тестирование и отпишусь.
Спасибо
Я бы выбрал цикл FOR. Циклы While могут привести к блокировке, если вы забудете включить i--. Поскольку вы знаете точное количество баров, его проще использовать, плюс i никогда не будет < 0. Это поможет избежать путаницы.
For (int i=Bars-1;i>0;i--) {
// код
}
Попробуйте установить все значения массива в 0, а затем вернуться назад и присвоить значения индикатора. Также попробуйте выполнить print() непосредственно после присвоения значения индикатора. Посмотрите, возвращает ли она вообще что-нибудь.
Лучше всего, на мой взгляд, задать размер массива. Скажем, 1000 позиций. Вам вряд ли понадобится столько, к тому же это сократит количество вычислений, которые вы делаете. Все, что вам нужно сделать, это просмотреть последние 999 баров до 0 и присвоить значения. Я припоминаю, что у MT4 есть проблемы с инициализацией массивов и тому подобное.По-прежнему просто печатается массив со всеми 0-ми значениями.
Странно
Argent86,
В вашем коде есть пара ошибок:Вот что вы пытаетесь сделать без этих ошибок
Доступ из MQ4 к функции dll с: списками переменных-аргументов
привет,
Кто-нибудь знает, возможно ли это: импортировать функцию dll, которая использует в качестве аргумента: списки переменных-аргументов.
например, vprintf - C++ Reference
int vprintf ( const char * format, va_list arg );
если да, то как это сделать?
Спасибо
MJ
Как вызвать функцию без возвращаемого значения
Здравствуйте, ребята и девчата.
В какой-то момент в моей программе я хочу вызвать функцию.
Однако функция не имеет возвращаемого значения (void). Как же мне вызвать функцию,
чтобы код внутри функции выполнялся именно в том месте, где я ее вызываю,
как если бы он был написан на этом месте?
Я сделал пример кода ниже... где я проверяю некоторые параметры, и если Ok, я хочу выполнить функцию...
Надеюсь, кто-нибудь сможет помочь мне с этим, заранее спасибо, Jonkie76
//+------------------------------------------------------------------+
//| экспертная функция запуска |
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; //В данный момент я хочу вызвать функцию.Как это сделать?
else
Alert("Ничего не делать"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//ФУНКЦИИ
//===================================================================+
//----------------------- ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
билет = 0,
ошибка = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Занятые ошибки
{
Sleep(5000);
continue;
}
else //нормальная ошибка
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}
Все очень просто. Вам просто нужно вызвать его, как он будет что-то возвращать, только вам не нужно сохранять результат, потому что у типа void нет результата вообще. (ничего не возвращает) Вот так:
int start()
{
//----
if (Price >= PRICE_CLOSE)
subCloseOrder(); // At this point I'd like to call the function.How do I do that?
else
Alert("Do nothing"); //
//----
return(0);
}
Вместо этого используйте "void". Например, так
{
...
//
//
// no need to place return at the end, but if you want then use "just" return, like this
//
//
return;
}Void означает, что функция не собирается возвращать значение, и таким образом она фактически становится процедурой, а не функцией.
Здравствуйте, ребята и девчата.
В какой-то момент в моей программе я хотел бы вызвать функцию.
Однако функция не имеет возвращаемого значения (void). Как же мне вызвать функцию?
чтобы код внутри функции выполнялся именно в том месте, где я ее вызываю,
как если бы он был написан на этом месте?
Я сделал пример кода ниже... где я проверяю некоторые параметры, и если Ok, я хочу выполнить функцию...
Надеюсь, кто-нибудь сможет помочь мне с этим, заранее спасибо, Jonkie76
//+------------------------------------------------------------------+
//| экспертная функция запуска |
//+------------------------------------------------------------------+
int start()
{
//----
if (Price >= PRICE_CLOSE)
call function ; //В данный момент я хочу вызвать функцию.Как это сделать?
else
Alert("Ничего не делать"); //
//----
return(0);
}
//+------------------------------------------------------------------+
//===================================================================+
//ФУНКЦИИ
//===================================================================+
//----------------------- ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА ----------------------+
void subCloseOrder()
{
int
i,
total = 0,
билет = 0,
ошибка = 0,
c = 0;
total = OrdersTotal();
for(i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<NumberOfTries;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
}
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Занятые ошибки
{
Sleep(5000);
continue;
}
else //нормальная ошибка
{
if(ticket>0) break;
}
}
}
break;
}
}
}
}