Как кодировать? - страница 283

 

Математическое ожидание Помогите пожалуйста

Здравствуйте

Похоже, я сам себя запутал.

Я пытаюсь использовать формулу ожидания в своем советнике. У меня есть формула 1-avgwin/avgloss*системная точность+1 и она отлично работает, но я хотел бы знать, как рассчитать и отобразить разницу между ордером и StopLoss, например.

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Я думаю, что это должно быть положительное число.

Ожидание 1,45

Поэтому для расчета TakeProfit -0.00197 * 1.45 = -0.00285

Поместите TP на OP_SELLSTOP 1.63406 - 1.63121

и наоборот для длинной позиции

Это все часть этой темы https://www.mql5.com/en/forum/178980, и если вы посмотрите на лист excel, то увидите, что я почти у цели.

Любая помощь была бы замечательной.

Спасибо Бено

 
Beno:
Здравствуйте

Похоже, я в какой-то степени запутался.

Я пытаюсь использовать формулу ожидания в моем советнике У меня есть формула 1-avgwin/avgloss*системная точность+1 и она отлично работает, но я хотел бы знать, как вычислить и отобразить разницу между ордером и StopLoss, например.

OP_SELLSTOP 1.63406

StopLoss 1.63603

1.63406 - 1.63603 = -0.00197 Я думаю, что это должно быть положительное число.

Ожидание 1,45

Поэтому для расчета TakeProfit -0.00197 * 1.45 = -0.00285

Поместите TP на OP_SELLSTOP 1.63406 - 1.63121

и наоборот для длинной позиции

Это все часть этой темы https://www.mql5.com/en/forum/178980, и если вы посмотрите на лист excel, то увидите, что я почти у цели.

Любая помощь была бы очень кстати.

Будь здоров, Бено

Самый простой способ - не думать об этом и использовать:

double MathAbs(double value)

MathAbs - Документация по MQL4

С уважением,

 

Привет CRN

Спасибо за ответ, вот что я пробовал.

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Я думаю, что это правильно, но просто печатает PipSL 15769.68328362

1 2011.01.04 00:00 sell stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 sell 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 изменить 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 закрытие по стопу 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

и мне нужна фактическая разница между продажей и SL

 

Кто-нибудь, пожалуйста, помогите мне.

Здравствуйте и с Рождеством всех.

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

Вот вложение :

spielershedge_library.mqh

spielershedge_pipstar.mq4

spielershedge_ea_v2.8.1.ex4

spielershedge_divergence_v5.1.ex4

-хотя это была старая ea, но я думаю, что мы можем поделиться и взять что-то, что будет полезно для всех нас.

-я только что нашел это из системы Хедж-трейдинга Spieler, полученной из торговли фьючерсными спредами - Страница 193 @ Forex Factory ( SpielersHedge PipStar.mq4 ) и остальное из системы Хедж-трейдинга Spieler, полученной из торговли фьючерсными спредами - Страница 87 @ Forex Factory.

-Извините за мой плохой английский.

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

 
Beno:
Привет CRN

Спасибо за ответ, вот что я пробовал.

double PipSL = MathAbs (OrderOpenPrice() - StopLoss); Print (MathAbs (OrderOpenPrice() - StopLoss));

Я думаю, что это правильно, но просто печатает PipSL 15769.68328362

1 2011.01.04 00:00 sell stop 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

2 2011.01.07 08:20 sell 1 0.01 1.54279 0.00000 0.00000 0.00 10000.00

3 2011.01.07 08:20 изменить 1 0.01 1.54279 1.57712 0.00000 0.00 10000.00

4 2011.01.11 23:40 закрыть по стопу 1 0.01 1.56045 1.57712 0.00000 -17.66 9982.34

и мне требуется фактическая разница между продажей и SL

Если вам нужно фактическое использование iClose(0,0,0)-OrderStopLoss().

но сначала выберите нужный ордер с помощью OrderSelect;

С уважением,

 

Временной фильтр с помощью CloseAll Помогите пожалуйста

Gidday

У меня есть временной фильтр, работающий на советнике, но я пытался прикрепить к нему closeall, чтобы если время равно времени закрытия, то closeall открывал позиции.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}
 

пожалуйста, помогите мне

extern int BuyStopTakeProfit=10;

extern int BuyStopSL=1000;

как закодировать

если BuyStopTakeProfit попал в TakeProfit, удалить все отложенные ордера

пожалуйста, кто-нибудь может помочь

 

Помогите!!!! Please!!!! iCustom функция

Помогите,

Я перепробовал все, чтобы заставить мой C_EA_rev6.mq4 вызывать любой буфер из пользовательского индикатора VSATEXTSIGNALS.mq4. Я использовал функцию iCustom, но она всегда возвращает 2147483647, что, как я понимаю, является кодом ошибки. Пользовательский индикатор помещает на график текстовые сигналы, основанные на технике анализа разброса объемов. Пользовательский индикатор работает нормально, когда я прикрепляю его к графику. Я потратил на это бесчисленное количество часов и перепробовал все известные мне комбинации. Любая помощь будет очень признательна. Также у меня есть вопрос, можно ли использовать функцию iCustom для пользовательского индикатора, который вызывает скрипт или файл .dll?

Код индикатора и советника смотрите во вложениях.

Спасибо,

cmfxtrader

Файлы:
 
cmfxtrader:
Помогите,

Я перепробовал все, чтобы заставить мой C_EA_rev6.mq4 вызвать любой буфер из пользовательского индикатора VSATEXTSIGNALS.mq4. Я использовал функцию iCustom, но она всегда возвращает 2147483647, что, как я понимаю, является кодом ошибки. Пользовательский индикатор помещает на график текстовые сигналы, основанные на технике анализа разброса объемов. Пользовательский индикатор работает нормально, когда я прикрепляю его к графику. Я потратил на это бесчисленное количество часов и перепробовал все известные мне комбинации. Любая помощь будет очень признательна. Также у меня есть вопрос, можно ли использовать функцию iCustom на пользовательском индикаторе, который вызывает скрипт или файл .dll?

Код индикатора и советника смотрите во вложениях.

Спасибо,

cmfxtrader

Привет,

Дело в том, что пока вы пытаетесь прочитать буфер из индикатора, он выводит текстовые сообщения, которые не являются буферами. Поэтому вы получаете значение 2147483647, которое является EMPTY_VALUE, а не ошибкой.

В любом случае, я предполагаю, что вы хотите автоматизировать сигналы от этого индикатора. Для этого есть простое решение. Индикатор объявлен как имеющий 7 буферов (#property indicator_buffers 7), но он использует только 5. Индикаторы могут использовать максимум 8 буферов. Это означает, что вы можете объявить еще один дополнительный буфер только для ваших вычислений и заполнить его сообщениями, которые идентифицируются. Номера сообщений вы найдете в функции TextOutput. Просто добавьте номера в буфер в зависимости от того, какое сообщение отображается. Например, если текст : "UPTHRUST / Weakness_", то добавьте в буфер 1, если сообщение PSEUDO UPTHRUST / Weakness_, то добавьте 4 и так далее. Индекс буфера будет таким же, как и значение переменной "i".

Что касается второго вопроса: вы всегда можете использовать функцию iCustom для индикатора (не скрипта) и читать значения, если они заполняют буферы, объявленные в индикаторе. Например, если это будет индикатор, который рисует линии, то вы можете прочитать значения линий - потому что для рисования чего-либо (кроме меток) индикатор должен заполнить буферы. Если же индикатор будет создавать графические объекты (как тот, что вы прикрепили), то вам придется: а) читать значения из графических объектов, или б) перекодировать индикатор (как я предложил выше). Не имеет значения, использует ли индикатор DLL или нет - ему просто нужно правильно заполнить буфер, чтобы прочитать свои значения из функции iCustom.

 
Beno:
Gidday

У меня есть временной фильтр, работающий на советнике, но я пытался прикрепить к нему closeall, чтобы если время равно времени закрытия, то closeall открывал позиции.

extern string timefilter="Time Filter";

extern int gmtshift=1; // gmt offset of the broker

extern bool generalfilter=false; // enable time filter

extern int starthour=7; // start hour to trade after this hour

extern int startminutes=0; // minutes of the start hour

extern int endhour=21; // stop to trade after this hour

extern int endminutes=0; // minutes of the start hour

extern bool tradesunday=true; // trade on sunday

extern bool fridayfilter=false; // enable special time filter on friday

extern int fridayhour=21; // stop to trade after this hour

extern int fridayminutes=0; // minutes of the friday hour[/CODE]

[CODE]void start() {

if(generalfilter){

nstarthour=starthour+(gmtshift);if(nstarthour>23)nstarthour=nstarthour-24;

if(nstarthour<10)istarthour="0"+nstarthour;

if(nstarthour>9)istarthour=nstarthour;

if(startminutes<10)istartminutes="0"+startminutes;

if(startminutes>9)istartminutes=startminutes;

tstart=StrToTime(istarthour+":"+istartminutes);

nendhour=endhour+(gmtshift);if(nendhour>23)nendhour=nendhour-24;

if(endhour<10)iendhour="0"+nendhour;

if(endhour>9)iendhour=nendhour;

if(endminutes<10)iendminutes="0"+endminutes;

if(endminutes>9)iendminutes=endminutes;

tend=StrToTime(iendhour+":"+iendminutes);

}

if(fridayfilter){

nfridayhour=fridayhour+(gmtshift);if(nfridayhour>23)nfridayhour=nfridayhour-24;

if(nfridayhour<10)ifridayhour="0"+nfridayhour;

if(nfridayhour>9)ifridayhour=nfridayhour;

if(fridayminutes<10)ifridayminutes="0"+fridayminutes;

if(fridayminutes>9)ifridayminutes=fridayminutes;

tfriday=StrToTime(ifridayhour+":"+ifridayminutes);

}

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

if (TimeCurrent() >= tend) {

for (int i=OrdersTotal()-1; i>=0; i--) {

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

if (OrderSymbol()==TradeSymbol) {

if (OrderType()==OP_BUY) {

pBid=MarketInfo(OrderSymbol(), MODE_BID);

OrderClose(OrderTicket(), OrderLots(), Bid, slippage, Yellow);

}

if (OrderType()==OP_SELL) {

pAsk=MarketInfo(OrderSymbol(), MODE_ASK);

OrderClose(OrderTicket(), OrderLots(), Ask, slippage, Orange);

}

}

}

}

}

попробуйте проверить эту часть:

if((generalfilter && (nstarthour<nendhour && TimeCurrent()tend) || (nstarthour>nendhour && TimeCurrent()tend)))

|| (tradesunday==false && DayOfWeek()==0) || (fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday))return(0);

Другая часть кода может быть проще, но она должна работать.

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

Посмотрите, например, на эту часть:

(fridayfilter && DayOfWeek()==5 && TimeCurrent()>tfriday) return(0);

На английском это означает: если сегодня пятница, и фильтр friday включен, и была пройдена метка времени (например, время окончания 18.00, а сейчас 18.01), то return(0).

Должно быть так: если сегодня пятница, и фильтр пятницы включен, и временная метка была пройдена CLOSE ALL и (например, время окончания 18.00 и 18.01), то return(0).

Причина обращения: