Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
stevenpun Для этого было бы проще всего добавить буфер "направления наклона" к этому индикатору или использовать какой-нибудь другой MACD, который уже имеет этот наклон в буфере.
Как насчет этого https://www.mql5.com/en/forum/178018/page67
Но проблема в том, что мне нужно вставить в код, я погуглил много ea, но не смог найти пример.
Пожалуйста, покажите мне какой-нибудь пример, спасибо за помощь.
Как насчет этого https://www.mql5.com/en/forum/178018/page67
Но проблема в том, что мне нужно вставить в код, я гуглил много ea, но не смог найти пример.
Пожалуйста, покажите мне какой-нибудь пример, спасибо за помощь.stevenpun
Это был бы хороший пример для использования.
Читаем буфер "colors" и когда значение в нем меняется с -1 на 1 - это сигнал на покупку, а когда значение меняется с 1 на -1 - это сигнал на продажу ("from" - это предыдущее значение буфера colors, а "to" - текущее значение, или, если вы хотите работать только с закрытыми барами, "from" - это 2 бара назад, а "to" - 1 бар назад).
Привет,
Я здесь новичок. Я хотел бы обновить объект прямоугольника, но не знаю как. Код ниже я использовал для создания объектов-прямоугольников, если EMA пересекаются. Этот прямоугольник должен закончиться, если цена отступит назад и коснется его. Как это сделать?
Заранее спасибо.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrLime
#property indicator_width1 2
#property indicator_color2 clrMagenta
#property indicator_width2 2
extern int EMA1 = 3;
extern int EMA2 = 21;
extern int EMA3 = 63;
extern double arrowDistance = 0.0003;
extern color upRectColor = clrYellow;
extern color dnRectColor = clrDodgerBlue;
extern color touchRectColor = clrDarkGray;
//---
extern double rectHigh = 0.0001;
extern int rectDays = 3;
extern int bars_limit = 2000;
extern bool showRectangle = true;
double upArrow[];
double dnArrow[];
double prev2EMA1, prev2EMA2, prev2EMA3;
double prevEMA1, prevEMA2, prevEMA3;
double curEMA1, curEMA2, curEMA3;
double prevOpenPrc, prevClosePrc, prevLowPrc, prevHighPrc;
string objRectName;
string rectArray[];
string indiName = "Emac";
int rectValidity = 0;
int arrayMaxAmounts = 99999;
int arrayCurAmount = 0;
int arrayLastAmount = 0;
//+------------------------------------------------------------------+
//| INIT() |
//+------------------------------------------------------------------+
int init() {
if (Period() != PERIOD_H1) {
Alert("Use only @ TF: H1");
return(0);
}
ArrayResize(rectArray,arrayMaxAmounts,arrayMaxAmounts);
IndicatorBuffers(2);
SetIndexBuffer(0,upArrow);
SetIndexBuffer(1,dnArrow);
SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexArrow(1,234);
SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);
SetIndexLabel(0,"Up");
SetIndexLabel(1,"Dn");
return(0);
}
//+------------------------------------------------------------------+
//| DEINIT() |
//+------------------------------------------------------------------+
int deinit() {
int k=0;
while (k<ObjectsTotal()) {
string objname = ObjectName(k);
if (StringSubstr(objname,0,StringLen("Emac")) == "Emac")
ObjectDelete(objname);
else
k++;
}
return(0);
}
//+------------------------------------------------------------------+
//| START() |
//+------------------------------------------------------------------+
int start() {
if (Period() != PERIOD_H1) {
Alert("Use only @ TF: H1");
return(0);
}
int limit,i,k;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---
if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;
if (Bars<EMA1 || Bars<EMA2 || Bars0 && bars_limit0 && bars_limit0 && bars_limit<EMA3)) {
Alert("Adjust limit settings or put more bars on your chart!");
return(0);
}
//---
for (i=0; i<limit; i++) {
prev2EMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+2);
prev2EMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+2);
prev2EMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+2);
prevEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i+1);
prevEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i+1);
prevEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i+1);
curEMA1 = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,i);
curEMA2 = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,i);
curEMA3 = iMA(NULL,0,EMA3,0,MODE_EMA,PRICE_CLOSE,i);
prevOpenPrc = iOpen(NULL,0,i+1);
prevClosePrc = iClose(NULL,0,i+1);
prevLowPrc = iLow(NULL,0,i+1);
prevHighPrc = iHigh(NULL,0,i+1);
rectValidity = rectDays*86400;
if ( (prev2EMA1=prevEMA2)&&(curEMA1>curEMA2)&&(prevEMA2>=prevEMA3)&&(curEMA2>curEMA3) ) { // up
upArrow = prevLowPrc - arrowDistance;
if (showRectangle == true) {
//----------------------- Draw Rectangle ----------------------
objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));
if (ObjectFind(objRectName) == -1) { // not exists
ObjectCreate(objRectName, OBJ_RECTANGLE, 0,Time,prevLowPrc,Time+rectValidity,prevLowPrc+rectHigh);
ObjectSet(objRectName, OBJPROP_COLOR, upRectColor);
ObjectSet(objRectName, OBJPROP_WIDTH, 0);
ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);
//--- put information to Array ---
arrayCurAmount = ArraySize(rectArray);
rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$up$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched
} // if
} // if
} // if
if ( (prev2EMA1>prev2EMA2)&&(prevEMA1<=prevEMA2)&&(curEMA1<curEMA2)&&(prevEMA2<=prevEMA3)&&(curEMA2<curEMA3) ) { // down
dnArrow = prevHighPrc + arrowDistance;
if (showRectangle == true) {
//----------------------- Draw Rectangle ----------------------
objRectName = StringConcatenate(indiName,"_",FuncPeriodToStr(Period()),"_",DoubleToStr(Time,0));
if (ObjectFind(objRectName) == -1) { // not exists
ObjectCreate(objRectName, OBJ_RECTANGLE, 0, Time,prevHighPrc,Time+rectValidity,prevHighPrc-rectHigh);
ObjectSet(objRectName, OBJPROP_COLOR, dnRectColor);
ObjectSet(objRectName, OBJPROP_WIDTH, 0);
ObjectSet(objRectName, OBJPROP_STYLE, STYLE_SOLID);
//--- put information to Array ---
arrayCurAmount = ArraySize(rectArray);
rectArray[arrayCurAmount] = StringConcatenate(objRectName,"$dn$",Time,"$",prevClosePrc,"$0"); // 0=new, not yet touched
} // if
} // if
} // if
} // for
//----------------------- Edit Rectangle, change time2 & color, if price touched ----------------------
return(0);
} // start
//+------------------------------------------------------------------+
void DelObjects(string id) {
int ot1=ObjectsTotal();
while(ot1>=0) {
if (StringFind(ObjectName(ot1),id,0)>-1) {
ObjectDelete(ObjectName(ot1));
}
ot1--;
}
return;
}
//+------------------------------------------------------------------+
string FuncPeriodToStr(int thePeriod) {
switch(thePeriod) {
case 1: return("M1");
case 5: return("M5");
case 15: return("M15");
case 30: return("M30");
case 60: return("H1");
case 240: return("H4");
case 1440: return("D1");
case 10080: return("W1");
case 43200: return("MN1");
default: return("MN1");
}
}
//+------------------------------------------------------------------+
Как общаться между двумя или более экспертами?
NewBie пытается развить это до MT4 build 670. Помогите ~
Скачать Торговый робот (советник) 'Три скользящие средние' для MetaTrader 5 в MetaTrader Market?
Мне это нравится, потому что я люблю K.I.S.S. (keep it simple stupid).
Я новичок и хотел бы разработать это.
(1. версия_01)
Когда он работает, он размещает позицию сразу же, как только советник включается.
Это похоже на обратное проектирование из .ex5 для создания .mq4.
(2. version_02)
На том же графике визуализируйте недельные R & S, которые будут найдены из Zig-Zag.
(3. version_03)
Добавьте логику,
--- не входить выше или ниже 20 пунктов линии тренда.
очищайте позицию на расстоянии 20 пипсов от недельного R & S.
Ваша помощь будет благодарна ~
Заранее спасибо ~
cosmiclifeform, забавно, что я не смог заставить Nice TraderEA пройти обратное тестирование с тех пор, так что я не смог оптимизировать его, я сделал это на демо-версиях alpari и ista forex, same....it продолжает давать мне пустой результат.Can u please tell me tips you use to backtest it.
Здравствуйте, Mastercash,
Я смог загрузить и запустить советник NiceTrader в тестере стратегий без проблем.
Я просто использовал настройки по умолчанию и ничего не менял... и не получил никаких сообщений об ошибках.
Я не пытался запустить его в реальном времени на моем демо... но этот советник отлично работает в тестере стратегий. См. прикрепленный график...
Получаете ли вы какие-либо сообщения об ошибках в журнале или другие подсказки, почему советник не торгует для вас...?
Надеюсь, это поможет,
Роберт
cosmiclifeform, забавно, что я не смог заставить Nice TraderEA провести обратное тестирование с тех пор, так что я не смог его оптимизировать, я сделал это на демо-версиях alpari и ista forex, same....it продолжает давать мне пустой результат.Can u please tell me tips you use to backtest it.
Привет, Mastercash,
Я запустил советника на демо-счете FXDD... и не делал ничего особенного... просто запустил советника в тестере стратегий с настройками по умолчанию.
Хотелось бы помочь больше... но без конкретных подсказок (журналы ошибок, снимки экрана и другие условия) невозможно выяснить, почему вы получаете пустые результаты.
Все, что я могу порекомендовать, это...
Сначала попробуйте в тестере хороший советник, который, как вы знаете, работает нормально.
Это позволит убедиться, что и ваши демо-счета, и ваши процедуры в порядке.
Сначала получите уверенность в том, что все работает так, как должно работать.
Затем попробуйте свой хороший советник... и запишите, что именно происходит. Даже на пустом экране должны быть журналы для проверки.
Попробуйте добавить утверждения PRINT и COMMENT везде... затем снова проверьте журналы... как на вкладке советника, так и на вкладке журнала...
Также ваши КОММЕНТЫ будут отображаться на экране... так что вы должны видеть, работает ваш советник или нет.
Суть в том, чтобы получить хорошую помощь в кодировании...
это дать как можно больше подсказок о том, что происходит с вашим советником...
Продолжайте пробовать все возможное... и сообщите нам о результатах.
Берегите себя,
Роберт
Как общаться между двумя или более советниками?
Если вы имеете в виду, существует ли какая-то функция или набор функций, предназначенных для этого, то ответ таков - нет.
Я видел довольно много попыток, и до сих пор ни один из этих способов, которые я видел, не работает во всех ситуациях. Кроме одного. Но один я придумал сам, и поскольку идея настолько проста, что я до сих пор не могу поверить, что никто до нее не додумался (она даже обеспечивает связь советников, которые вообще не находятся в одном месте, и не использует для этого никакого API), то я оставляю это решение для себя (в этом случае я жду, когда кто-нибудь додумается до того же).
Просто попытайтесь думать вне ожидаемых границ
Если вы имеете в виду, существует ли какая-то функция или набор функций, предназначенных для этого, то ответ таков: не существует.
Я видел довольно много попыток, и до сих пор ни один из тех способов, которые я видел, не работает во всех ситуациях. Кроме одного. Но один я придумал сам, и поскольку идея настолько проста, что я до сих пор не могу поверить, что никто до нее не додумался (она даже обеспечивает связь советников, которые вообще не находятся в одном месте, и не использует для этого никакого API), то я оставляю это решение для себя (в этом случае я жду, когда кто-нибудь додумается до того же).
Просто попробуйте думать вне ожидаемых границ.Я знаю, что вы имеете в виду: идеи иногда стоят гораздо больше, чем то, как они потом делаются. Спасибо
здравствуйте,
уважаемый mladen, у меня к Вам небольшая просьба - не могли бы Вы отключить всю информацию, которую показывает в левом верхнем углу прикрепленный ниже индикатор?
заранее спасибо ;-)