Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дорогой МЛАДЕН,
Возможно, мой предыдущий запрос случайно удалили, так как в основном все бегает туда-сюда, ищет и настраивает их точное место, но мы легко и комфортно делаем нашу работу, в качестве напоминания я прошу вас о некоторых простых трейлинг-стоп с BE код, который я хочу добавить / объединить в прилагаемом советника, который я изменил с вашей помощью и руководством, но я не спешу, когда это возможно для вас, я знаю, как много вещей распространяются и ждут вас, спасибо.
с уважением
simple_ma_cross_eamod-hp.mq4OK. Будет сделано
Привет всем,
Спасибо, что нашли время прочитать мой пост. Я абсолютный новичок, когда дело доходит до кода. Я попробовал пару вещей, чтобы заставить советника работать, но они не помогли. Я изучаю глобальные переменные, так как думаю, что они нужны для запоминания того, что произошло, а не для перезапуска при обновлении/перезагрузке и т.д. Он отлично работает в бэктесте, но по какой-то причине при работе в реальном времени он просто перестает принимать сделки или закрывать их, и я просто не могу понять это. Я также пытаюсь научиться делать эти вещи, но я только начинаю, поэтому простите меня, если я делаю что-то не так. У советника есть время старта и остановки, и за это время он может открыть x сделок, и когда они закрываются, цикл завершается. Он настроен на то, чтобы разрешить только 1 цикл за период времени.
Кто-нибудь может взглянуть на этот код, чтобы понять, в чем проблема, пожалуйста. Большое спасибо за любую помощь
маа1
quantum_shaolin_1.3.2.mq4
quantum.mq4
Здравствуйте, Младен,
У меня есть индикатор-сканер, который сообщает, сколько индикаторов указывают на возможность покупки или продажи по определенному символу, и сканирует символ на нескольких таймфреймах.
Проблема в том, что индикатор говорит, что индикаторы всегда есть, даже когда на самом деле их нет. Когда это так, количество индикаторов всегда равно одному и тому же числу.
Пожалуйста, посмотрите на код ниже:
int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};
for(x=0; x<=5; x++) {
if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;
BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);
//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);
BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);
BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);
BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);
BufferALL[5]=indi(symbol[y],Timeframe[x][0]);
BufferALL[6]=indi(symbol[y],Timeframe[x][0]);
BufferALL[7]=indi(symbol[y],Timeframe[x][0]);
BufferALL[8]=indi(symbol[y],Timeframe[x][0]);
BufferALL[9]=indi(symbol[y],Timeframe[x][0]);
BufferALL[10]=indi(symbol[y],Timeframe[x][0]);
BufferALL[11]=indi(symbol[y],Timeframe[x][0]);
BufferALL[12]=indi(symbol[y],Timeframe[x][0]);
BufferALL[13]=indi(symbol[y],Timeframe[x][0]);
BufferALL[14]=indi(symbol[y],Timeframe[x][0]);
BufferALL[15]=indi(symbol[y],Timeframe[x][0]);
BufferALL[16]=indi(symbol[y],Timeframe[x][0]);
BufferALL[17]=indi(symbol[y],Timeframe[x][0]);
BufferALL[18]=indi(symbol[y],Timeframe[x][0]);
BufferALL[19]=indi(symbol[y],Timeframe[x][0]);
BufferALL[20]=indi(symbol[y],Timeframe[x][0]);
BufferALL[21]=indi(symbol[y],Timeframe[x][0]);
for(z=0; z<=14; z++){
if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;
if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;
}
for(z=15; z<=21; z++){
if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>
if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<
}
} // end of timeframe loop 6 iterations
Когда все отображается в оповещении, я получаю что-то вроде EURUSD: 15m/60m/4u/1d/1w/1mo указывает на возможность покупки 7/7/7/7/7/7/.
Это означает, что он суммирует 7 индикаторов для каждого таймфрейма, что явно ошибочно. Он даже утверждает это, когда я убираю все вызовы функций. Когда я делаю это, все элементы BufferALL[] оказываются пустыми.
Но, очевидно, значение EMPTY все еще является значением, которое можно сравнить с другим значением, например, 534653647457. Когда я использую сравнение >= или = 534653647457, чтобы == 534653647457, сообщения /7/7/7/7/7/7 прекращаются. Как я могу это исправить?
Здравствуйте, Младен,
У меня есть индикатор-сканер, который сообщает, сколько индикаторов указывают на возможность покупки или продажи определенного символа, и сканирует символ на нескольких таймфреймах.
Проблема в том, что индикатор говорит, что индикаторы всегда есть, даже если на самом деле их нет. Когда это так, количество индикаторов всегда равно одному и тому же числу.
Пожалуйста, посмотрите на код ниже:
int Timeframe[7][3]={15,,, 60,,, 240,,, 1440,,, 10080,,, 43200,, ,,};
for(x=0; x<=5; x++) {
if ((SymbolBars[y][x]==iBars(symbol[y],Timeframe[x][0]))&&(SymbolBars[y][x+1]==iBars(symbol[y],Timeframe[x+1][0]))) continue;
BufferALL[0]=indi1(symbol[y],Timeframe[x][0]);
//BufferALL[1]=ind2i(symbol[y],Timeframe[x][0]);
BufferALL[2]=ind3i(symbol[y],Timeframe[x][0]);
BufferALL[3]=ind4i(symbol[y],Timeframe[x][0]);
BufferALL[4]=ind5i(symbol[y],Timeframe[x][0]);
BufferALL[5]=indi(symbol[y],Timeframe[x][0]);
BufferALL[6]=indi(symbol[y],Timeframe[x][0]);
BufferALL[7]=indi(symbol[y],Timeframe[x][0]);
BufferALL[8]=indi(symbol[y],Timeframe[x][0]);
BufferALL[9]=indi(symbol[y],Timeframe[x][0]);
BufferALL[10]=indi(symbol[y],Timeframe[x][0]);
BufferALL[11]=indi(symbol[y],Timeframe[x][0]);
BufferALL[12]=indi(symbol[y],Timeframe[x][0]);
BufferALL[13]=indi(symbol[y],Timeframe[x][0]);
BufferALL[14]=indi(symbol[y],Timeframe[x][0]);
BufferALL[15]=indi(symbol[y],Timeframe[x][0]);
BufferALL[16]=indi(symbol[y],Timeframe[x][0]);
BufferALL[17]=indi(symbol[y],Timeframe[x][0]);
BufferALL[18]=indi(symbol[y],Timeframe[x][0]);
BufferALL[19]=indi(symbol[y],Timeframe[x][0]);
BufferALL[20]=indi(symbol[y],Timeframe[x][0]);
BufferALL[21]=indi(symbol[y],Timeframe[x][0]);
for(z=0; z<=14; z++){
if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;
if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;
}
for(z=15; z<=21; z++){
if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>
if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<
}
} // end of timeframe loop 6 iterations
Когда все отображается в оповещении, я получаю что-то вроде EURUSD: 15m/60m/4u/1d/1w/1mo указывает на возможность покупки 7/7/7/7/7/7/.
Это означает, что он суммирует 7 индикаторов для каждого таймфрейма, что явно ошибочно. Он даже утверждает это, когда я убираю все вызовы функций. Когда я это делаю, все элементы BufferALL[] оказываются пустыми.
Но, очевидно, значение EMPTY все еще является значением, которое можно сравнить с другим значением, например, 534653647457. Когда я использую сравнение >= или = 534653647457, чтобы == 534653647457, сообщения /7/7/7/7/7/7 прекращаются. Как я могу это исправить?mrcodix
Не зная точно, что делают индикаторы (каковы их возвращаемые значения), я могу только строить догадки, а это не поможет ничем.
mrcodix
Не зная точно, что делают индикаторы (каковы их возвращаемые значения), я могу только строить догадки, а это совсем не поможет.Уважаемый Младен,
Вам не обязательно знать значения возврата, потому что виноваты не индикаторы. Видите ли, точно такая же проблема возникает, когда я отключаю все функции вызова, добавляя "//" перед каждой строкой кода (превращая их в строки комментариев). То же самое касается значений за = в этой части:
if (BufferALL[z] >=534653647457) Timeframe[x][1]=Timeframe[x][1]+1;
if (BufferALL[z] <=543456346463) Timeframe[x][2]=Timeframe[x][2]+1;
}
for(z=15; z<=21; z++){
if (BufferALL[z] >= 22345654) Timeframe[x][2]=Timeframe[x][2]+1; //>
if (BufferALL[z] <= 11111111111) Timeframe[x][1]=Timeframe[x][1]+1; //<
}[/CODE]
it might aswell be something like
if (BufferALL[z] >=1111111111111) Timeframe[x][1]=Timeframe[x][1]+1;
if (BufferALL[z] <=2222222222222) Timeframe[x][2]=Timeframe[x][2]+1;
}
for(z=15; z<=21; z++){
if (BufferALL[z] >= 333333333333) Timeframe[x][2]=Timeframe[x][2]+1; //>
if (BufferALL[z] <= 444444444444) Timeframe[x][1]=Timeframe[x][1]+1; //<
}it will give the same exact alert message that says /15m/60m/4u/1d/1w/1mo/ is indicating a buying opportunity /7/7/7/7/7/7/. I disabled all the function call lines with // so the BufferALL[22] elements should be EMPTY, they shoulden't contain any value whatsoever. Yet, when the computer comes at the if condition parts BufferALL[z] >=1111111111111 etc it ALWAYS states that the "value" thats inside BufferALL[z] is larger then 11111111111 (or any value you wish to put behind it). The only way to make these additions stop is by changing the if condition = into ==. When the computer asks whether the empty value of BufferALL[z] is exactly the same as 11111111 or 22222 or whatever value you wish to compare, it doesen't return a true and Timeframe is not added with +1. Please try it for youself. I will add the message construction code below:
[CODE]
int SymbolBars[216][7];
if (((Timeframe[0][1] > 0) && (Timeframe[1][1] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][1] > 0) && (Timeframe[2][1] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][1] > 0) && (Timeframe[3][1] > 0)
&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][1] > 0) && (Timeframe[4][1] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][1] > 0) && (Timeframe[5][1] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))
{
if (Timeframe[0][1]>0)
{
StringAdd(alarmbericht,"15m/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][1],"/"));
SymbolBars[y][0]=iBars(symbol[y],15);
}
if (Timeframe[1][1]>0)
{
StringAdd(alarmbericht,"60m/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][1],"/"));
SymbolBars[y][1]=iBars(symbol[y],60);
}
if (Timeframe[2][1]>0)
{
StringAdd(alarmbericht,"4u/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][1],"/"));
SymbolBars[y][2]=iBars(symbol[y],240);
}
if (Timeframe[3][1]>0)
{
StringAdd(alarmbericht,"1d/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][1],"/"));
SymbolBars[y][3]=iBars(symbol[y],1440);
}
if (Timeframe[4][1]>0)
{
StringAdd(alarmbericht,"1w/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][1],"/"));
SymbolBars[y][4]=iBars(symbol[y],10080);
}
if (Timeframe[5][1]>0)
{
StringAdd(alarmbericht,"1mo/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][1],"/"));
SymbolBars[y][5]=iBars(symbol[y],43200);
}
Alert(+symbol[y]+" "+alarmbericht+" are indicating a selling opportunity. " +indicatoraantal+".");
alarmbericht = "";
indicatoraantal = "";
}
if (((Timeframe[0][2] > 0) && (Timeframe[1][2] > 0) && (SymbolBars[y][0]!=iBars(symbol[y],Timeframe[0][0]))&&(SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))) || ((Timeframe[1][2] > 0) && (Timeframe[2][2] > 0)&& (SymbolBars[y][1]!=iBars(symbol[y],Timeframe[1][0]))&&(SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))) || ((Timeframe[2][2] > 0) && (Timeframe[3][2] > 0)
&& (SymbolBars[y][2]!=iBars(symbol[y],Timeframe[2][0]))&&(SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))) || ((Timeframe[3][2] > 0) && (Timeframe[4][2] > 0) && (SymbolBars[y][3]!=iBars(symbol[y],Timeframe[3][0]))&&(SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0]))) || ((Timeframe[4][2] > 0) && (Timeframe[5][2] > 0)&& (SymbolBars[y][4]!=iBars(symbol[y],Timeframe[4][0])) &&(SymbolBars[y][5]!=iBars(symbol[y],Timeframe[5][0]))))
{
if (Timeframe[0][2]>0)
{
StringAdd(alarmbericht,"15m/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[0][2],"/"));
SymbolBars[y][0]=Bars(symbol[y],15);
}
if (Timeframe[1][2]>0)
{
StringAdd(alarmbericht,"60m/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[1][2],"/"));
SymbolBars[y][1]=Bars(symbol[y],60);
}
if (Timeframe[2][2]>0)
{
StringAdd(alarmbericht,"4u/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[2][2],"/"));
SymbolBars[y][2]=Bars(symbol[y],240);
}
if (Timeframe[3][2]>0)
{
StringAdd(alarmbericht,"1d/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[3][2],"/"));
SymbolBars[y][3]=Bars(symbol[y],1440);
}
if (Timeframe[4][2]>0)
{
StringAdd(alarmbericht,"1w/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[4][2],"/"));
SymbolBars[y][4]=Bars(symbol[y],10080);
}
if (Timeframe[5][2]>0)
{
StringAdd(alarmbericht,"1mo/");
StringAdd(indicatoraantal,StringConcatenate(Timeframe[5][2],"/"));
SymbolBars[y][5]=Bars(symbol[y],43200);
}
Alert(+symbol[y]+" "+alarmbericht+" are indicating a buying oppertunity. " +indicatoraantal+".");
alarmbericht = "";
indicatoraantal = "";
}Младен,
Вот пример непрерывного оповещения, когда я удаляю все звонки индикаторов, превращая их в строки комментариев.
Когда есть возможность покупки, сумма всех индикаторов на всех возможных таймфреймах равна 15. При возможности продажи - 7. BufferALL[] - EMPTY, так что это не имеет никакого смысла.
Наконец, я хотел бы упомянуть вам кое-что не по теме. В прошлом я спрашивал о том, как индикатор сканер сканирует несколько символов последовательно. Я задавался вопросом, не получит ли он все тики на более часто меняющихся символах, если индикатор прикреплен к графику, на котором текущий символ обновляется не так часто (меньше тиков в секунду). Это означает, что теоретически индикатор все еще находится на 5-минутном баре в 20:05, в то время как более быстро обновляющиеся символы, которые он также должен сканировать, уже находятся в 20:10. Просто потому, что новый бар начинается на первом тике после 20:04:59, а не когда часы бьют 20:05:00. Вы ответили на это, сказав, что все символы будут проверяться с фиксированной скоростью проверки, потому что в новой версии metatrader процедура start {return} больше не активируется на каждом новом тике. Вместо этого она активируется с фиксированной скоростью. Оказалось, что это не так. После превращения всех моих индикаторов в функции, включенные в код самого индикатора-сканера, весь индикатор все еще заставлял mt4 зависать, когда я запускал его. То есть использование iCustom() для вызова кода или вставка кода и превращение его во внутреннюю функцию ничего не меняет, он все равно зависает. Но я нашел решение этой проблемы, отказавшись от длинного главного цикла for с 215 итерациями (каждую итерацию обрабатывается другой символ из symbol[y]) и заменив его переменной, которая получает добавление после каждого тика. Я использую ее, чтобы сообщить компьютеру, какой символ он должен использовать, так что теперь вместо того, чтобы пытаться анализировать все 216 символов на каждом тике (что приводит к зависанию всего процесса), на каждом тике анализируется только один символ. Когда переменная сложения достигает значения 215, она сбрасывается обратно в 0, и весь цикл 216 начинается заново. Теперь все символы анализируются, хотя и немного медленнее, чем если бы они анализировались все 216 на каждом тике (если бы, конечно, все не замерло) ..... В любом случае. Дело в том, что Start{} активируется только тогда, когда текущий символ на графике обновляется. Это означает, что требуется больше времени, чтобы просмотреть все 216 символов, когда индикатор является менее активным символом (например, акция) по сравнению с очень активным символом (например, EURUSD). Поэтому Start{} по-прежнему активируется на каждом новом тике.
Здравствуйте Mladen и Mrtools, с большим удовольствием обращаюсь.
Было бы любезно решить проблему двух ошибок при компиляции прилагаемого индикатора.
Заранее спасибо
Moreno
PS: Прошу прощения за мой английский :-)
Здравствуйте Mladen и Mrtools, я спрашиваю с большим удовольствием.
Хотелось бы решить проблему с двумя ошибками при компиляции прилагаемого индикатора.
Заранее спасибо
Морено
PS: Извините за мой английский :-)morenokosta
Этот индикатор работает нормально как есть.
Нет необходимости вносить какие-либо изменения в код
Привет Младен
Не могли бы вы добавить алерт на этот индикатор, я новичок.
Спасибо