Условия должны быть более точными. Например: когда оба индикатора подают одинаковые сигналы - это очень часто. Так когда именно они должны это делать. При первом появлении этого? При каждом появлении? Кроме того, если вы выходите при каждом изменении одного из двух сигналов, выходы будут очень частыми.
Спасибо за ответ! Да, возможно, это не самая лучшая стратегия. Просто, если я получу это как шаблон, я, вероятно, смогу сделать некоторые изменения самостоятельно позже. Что я хочу, так это возможность комбинировать два индикатора (и использовать их буферы).
Скажем, стратегия должна быть такой: покупать, когда оба индикатора показывают. И продавать, когда оба индикатора показывают. Это должно происходить после смены индикатора и закрытия бара. Это должно происходить при каждом появлении этого.
У меня возникла проблема с прилагаемым индикатором:
когда indi применяется во время исполнения советника (стандартная скользящая средняя в MT4), значения сильно отличаются от значений, которые отображаются при применении того же индикатора в конце исполнения советника.
Не могли бы вы объяснить почему и если возможно, то поправить индикатор?
Младен только что закончил мою настройку в предыдущем индикаторе, который вы модифицировали. Что не так в этом коде? Он ничего не отображает... Никаких ошибок при компиляции.
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Младен только что закончил мою настройку в предыдущем индикаторе, который вы модифицировали. Что не так в этом коде? Он ничего не отображает... Никаких ошибок при компиляции.
thefxpros
Попробуйте так
#property version"1.00"#property strict#property indicator_chart_window#property indicator_buffers4#property indicator_color1 Gold
#property indicator_color2 DodgerBlue
#property indicator_color3 LimeGreen
#property indicator_color4 Crimson
#property indicator_width1 2#property indicator_width2 2#property indicator_width3 2#property indicator_width4 2externstring NOTE1 = "SELECT PARAMETERS OF THE INDICATOR"; //SPAN MA CROSS PARAMSexternint SpanPeriod = 1; // Period of Spanexternint SpanShift = -26; // Shift of SpanexternENUM_MA_METHOD SpanMode = 1; // Mode of SpanexternENUM_APPLIED_PRICE SpanPrice = 0; // Applied price of Spanexternint MaPeriod = 55; // Period of Moving averageexternint MaShift = 0; // Shift of Moving averageexternENUM_MA_METHOD MaMode = 1; // Mode of Moving averageexternENUM_APPLIED_PRICE MaPrice = 0; // Applied price of Moving averageexternstring NOTE2 = "SELECT COLORS/STYLES OF THE INDICATOR"; //SPAN MA CROSS COLORS/STYLESexterncolor SpanClr = Gold; // Span colorexternint SpanWdt = 2; // Span widthexternENUM_LINE_STYLE SpanStl = 0; // Span line styleexterncolor MaClr = DodgerBlue; // Moving average colorexternint MaWdt = 2; // Moving average widthexternENUM_LINE_STYLE MaStl = 0; // Moving average line styleexternstring NOTE3 = "SELECT PARAMETERS OF THE SIGNAL ARROWS"; //SPAN MA CROSS PARAMETERS OF THE SIGNAL ARROWSexternbool DrawArrows = true; // Draw signal arrows?externbool DrawMaLines = true; // Draw lines?externcolor UpArrowClr = LimeGreen; // Up arrow colorexternint UpArrowWdt = 2; // Up arrow widthexterncolor DnArrowClr = Crimson; // Down arrow colorexternint DnArrowWdt = 2; // Down arrow widthexternint ArrowsDistance = 10; // Arrows distance from candleexternstring NOTE4 = "SELECT PARAMETERS OF THE ALERT"; //SPAN MA CROSS PARAMETERS OF THE ALERTexternbool AlertsOn = true; // Active alert?externbool AlertsOnCurrent = true; // Alert on current unclosed barexternbool AlertsMessage = true; // Alert messageexternbool AlertsSound = true; // Alert soundexternbool AlertsEmail = false; // Alert e-mailexternstring SoundFile = "alert2.wav"; // Filename of sound alertstring IndicatorFileName;
int WhichBar;
double Gap;
double SpanBuffer[]; // Buffer of the Spandouble MaBuffer[]; // Buffer of the Moving averagedouble CrossUpBuffer[]; // Up arrow bufferdouble CrossDnBuffer[]; // Down arrow bufferdouble TrendBuffer[]; // Span/Ma cross bufferint init()
{
IndicatorFileName = WindowExpertName();
IndicatorBuffers(5);
SetIndexBuffer(0, SpanBuffer);
SetIndexBuffer(1, MaBuffer);
SetIndexBuffer(2, CrossUpBuffer);
SetIndexBuffer(3, CrossDnBuffer);
SetIndexBuffer(4, TrendBuffer);
if (DrawMaLines) {
SetIndexStyle (0, DRAW_LINE, SpanStl, SpanWdt, SpanClr);
SetIndexStyle (1, DRAW_LINE, MaStl, MaWdt, MaClr);}
else {
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_NONE);}
if (DrawArrows) {
SetIndexStyle (2, DRAW_ARROW, 0, UpArrowWdt, UpArrowClr); SetIndexArrow(0, 233);
SetIndexStyle (3, DRAW_ARROW, 0, DnArrowWdt, DnArrowClr); SetIndexArrow(0, 234);}
else {
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);}
return(0);}
int deinit() { return(0); }
int start() {
int counted_bars = IndicatorCounted();
int i, limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit = MathMin(Bars-counted_bars, Bars-1);
for(i=limit; i>=0; i--){
SpanBuffer[i] = iMA(NULL, 0, SpanPeriod, SpanShift, SpanMode, SpanPrice, i);
MaBuffer[i] = iMA(NULL, 0, MaPeriod, MaShift, MaMode, MaPrice, i);
Gap = iATR(NULL,0,20,i);
if (i<Bars-1) TrendBuffer[i] = TrendBuffer[i+1];
if (SpanBuffer[i] > MaBuffer[i]) TrendBuffer[i] = 1;
if (SpanBuffer[i] < MaBuffer[i]) TrendBuffer[i] =-1;
CrossUpBuffer[i] = EMPTY_VALUE;
CrossDnBuffer[i] = EMPTY_VALUE;
if (i<Bars-1 && TrendBuffer[i]!= TrendBuffer[i+1])
if (TrendBuffer[i] == 1)
CrossUpBuffer[i] = Low[i] - ArrowsDistance * Gap;
else CrossDnBuffer[i] = High[i] + ArrowsDistance * Gap;
}
if (AlertsOn)
{
if (AlertsOnCurrent)
WhichBar = 0;
else WhichBar = 1;
if (TrendBuffer[WhichBar] != TrendBuffer[WhichBar+1])
if (TrendBuffer[WhichBar] == 1)
doAlert("uptrend");
else doAlert("downtrend");
}
return(0);
}
// CUSTOM FUNCTIONS -------------------------void doAlert(string doWhat)
{
staticstring previousAlert="nothing";
staticdatetime previousTime;
string message;
if (previousAlert != doWhat || previousTime != Time[0]) {
previousAlert = doWhat;
previousTime = Time[0];
message = StringConcatenate(Symbol()," at ",TimeToStr(TimeLocal(),TIME_SECONDS)," Span ma cross ", doWhat);
if (AlertsMessage) Alert(message);
if (AlertsEmail) SendMail(StringConcatenate(Symbol()," Span ma cross "), message);
if (AlertsSound) PlaySound(SoundFile);
}
}
Попробовал Mladen и вроде работает, но в тестере стратегий не обновляется и не появляется оповещение, когда рынок откроется я попробую на реальном рынке. спасибо.
Саймон
Условия должны быть более точными. Например: когда оба индикатора подают одинаковые сигналы - это очень часто. Так когда именно они должны это делать. При первом появлении этого? При каждом появлении? Кроме того, если вы выходите при каждом изменении одного из двух сигналов, выходы будут очень частыми.
Спасибо за ответ! Да, возможно, это не самая лучшая стратегия. Просто, если я получу это как шаблон, я, вероятно, смогу сделать некоторые изменения самостоятельно позже. Что я хочу, так это возможность комбинировать два индикатора (и использовать их буферы).
Скажем, стратегия должна быть такой: покупать, когда оба индикатора показывают. И продавать, когда оба индикатора показывают. Это должно происходить после смены индикатора и закрытия бара. Это должно происходить при каждом появлении этого.
Все самое лучшее!
Уважаемый mladen,
У меня возникла проблема с прилагаемым индикатором:
когда indi применяется во время исполнения советника (стандартная скользящая средняя в MT4), значения сильно отличаются от значений, которые отображаются при применении того же индикатора в конце исполнения советника.
Не могли бы вы объяснить почему и если возможно, то поправить индикатор?
Господин Младен,
Я делаю некоторые изменения для ленты ma, заполненной каналом ma, но у меня проблема с буфером.
Можно ли как-то скрыть канал за гистограммой или сделать пустоту между каналами?
Я пытаюсь сделать его пустым, но могу сделать это только с одной стороны, нужно ли добавить еще один буфер?
И еще одна проблема в строке 44, я не могу ее вывести или удалить.
всегда выходит ошибка.
Пожалуйста, дайте мне совет, спасибо.
Стивен.
Господин Младен,
Я делаю некоторые изменения для ленты ma, заполненной каналом ma, но у меня проблема с буфером.
Можно ли как-то скрыть канал за гистограммой или сделать пустоту между каналами?
Я пытаюсь сделать его пустым, но могу сделать это только с одной стороны, нужно ли добавить еще один буфер?
И еще одна проблема в строке 44, я не могу ее вывести или удалить.
всегда выходит ошибка.
Пожалуйста, дайте мне совет, спасибо.
Steven .
Я не уверен, что это то, что вы пытаетесь сделать, но попробуйте.
Я не уверен, что это то, что вы пытаетесь сделать, но попробуйте.
ДА, именно то, что я хочу :D
Но не могли бы вы помочь мне проверить код в строке 44 'AlertOnClosedCandle', почему он не может удалить или extern bool?
Это мой первый раз с такой проблемой.
В любом случае, я узнал кое-что о буфере.
Спасибо.
Младен только что закончил мою настройку в предыдущем индикаторе, который вы модифицировали. Что не так в этом коде? Он ничего не отображает... Никаких ошибок при компиляции.
Младен только что закончил мою настройку в предыдущем индикаторе, который вы модифицировали. Что не так в этом коде? Он ничего не отображает... Никаких ошибок при компиляции.
thefxpros
Попробуйте так
Коррекция
Измените строки 74 и 75 в sigma следующим образом:
к этому
И это должно работать
Или полностью удалите строгое утверждение (поскольку этот индикатор нуждается в полной переработке, если он будет использоваться со "строгим").
Уважаемый mladen,
Я попробовал оба предложения без успеха, но я понял, что инди не обновляется при запуске в советнике, как на следующем рисунке.
Должно быть возможно исправить это?
:
thefxpros
Попробуйте сделать это следующим образом
Здравствуйте, господин Младен,
Я думал добавить комментарий, когда цена отклоняется от тренда и есть "ждать покупки" и "ждать продажи".
Добавление новой линии к покупке не проблема, но когда добавляю ее к продаже, она не может работать.
Что мне нужно изменить?