Помощь в кодировании - страница 351

 
mladen:
stevenpun Для этого было бы проще всего добавить буфер "направления наклона" к этому индикатору или использовать какой-нибудь другой MACD, который уже имеет этот наклон в буфере.

Как насчет этого https://www.mql5.com/en/forum/178018/page67

Но проблема в том, что мне нужно вставить в код, я погуглил много ea, но не смог найти пример.

Пожалуйста, покажите мне какой-нибудь пример, спасибо за помощь.

 
stevenpun:
Как насчет этого 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.

cosmiclifeform:
Здравствуйте, Mastercash,

Я смог загрузить и запустить советник NiceTrader в тестере стратегий без проблем.

Я просто использовал настройки по умолчанию и ничего не менял... и не получил никаких сообщений об ошибках.

Я не пытался запустить его в реальном времени на моем демо... но этот советник отлично работает в тестере стратегий. См. прикрепленный график...

Получаете ли вы какие-либо сообщения об ошибках в журнале или другие подсказки, почему советник не торгует для вас...?

Надеюсь, это поможет,

Роберт

 
Mastercash:
cosmiclifeform, забавно, что я не смог заставить Nice TraderEA провести обратное тестирование с тех пор, так что я не смог его оптимизировать, я сделал это на демо-версиях alpari и ista forex, same....it продолжает давать мне пустой результат.Can u please tell me tips you use to backtest it.

Привет, Mastercash,

Я запустил советника на демо-счете FXDD... и не делал ничего особенного... просто запустил советника в тестере стратегий с настройками по умолчанию.

Хотелось бы помочь больше... но без конкретных подсказок (журналы ошибок, снимки экрана и другие условия) невозможно выяснить, почему вы получаете пустые результаты.

Все, что я могу порекомендовать, это...

Сначала попробуйте в тестере хороший советник, который, как вы знаете, работает нормально.

Это позволит убедиться, что и ваши демо-счета, и ваши процедуры в порядке.

Сначала получите уверенность в том, что все работает так, как должно работать.

Затем попробуйте свой хороший советник... и запишите, что именно происходит. Даже на пустом экране должны быть журналы для проверки.

Попробуйте добавить утверждения PRINT и COMMENT везде... затем снова проверьте журналы... как на вкладке советника, так и на вкладке журнала...

Также ваши КОММЕНТЫ будут отображаться на экране... так что вы должны видеть, работает ваш советник или нет.

Суть в том, чтобы получить хорошую помощь в кодировании...

это дать как можно больше подсказок о том, что происходит с вашим советником...

Продолжайте пробовать все возможное... и сообщите нам о результатах.

Берегите себя,

Роберт

 
apprentice coder:
Как общаться между двумя или более советниками?

Если вы имеете в виду, существует ли какая-то функция или набор функций, предназначенных для этого, то ответ таков - нет.

Я видел довольно много попыток, и до сих пор ни один из этих способов, которые я видел, не работает во всех ситуациях. Кроме одного. Но один я придумал сам, и поскольку идея настолько проста, что я до сих пор не могу поверить, что никто до нее не додумался (она даже обеспечивает связь советников, которые вообще не находятся в одном месте, и не использует для этого никакого API), то я оставляю это решение для себя (в этом случае я жду, когда кто-нибудь додумается до того же).

Просто попытайтесь думать вне ожидаемых границ

 
mladen:
Если вы имеете в виду, существует ли какая-то функция или набор функций, предназначенных для этого, то ответ таков: не существует.

Я видел довольно много попыток, и до сих пор ни один из тех способов, которые я видел, не работает во всех ситуациях. Кроме одного. Но один я придумал сам, и поскольку идея настолько проста, что я до сих пор не могу поверить, что никто до нее не додумался (она даже обеспечивает связь советников, которые вообще не находятся в одном месте, и не использует для этого никакого API), то я оставляю это решение для себя (в этом случае я жду, когда кто-нибудь додумается до того же).

Просто попробуйте думать вне ожидаемых границ.

Я знаю, что вы имеете в виду: идеи иногда стоят гораздо больше, чем то, как они потом делаются. Спасибо

 

здравствуйте,

уважаемый mladen, у меня к Вам небольшая просьба - не могли бы Вы отключить всю информацию, которую показывает в левом верхнем углу прикрепленный ниже индикатор?

заранее спасибо ;-)

Файлы: