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

 

Это подходит для цены. Он хочет найти самый высокий и самый низкий показатель идикатора.

Lux

 

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

Вы можете попробовать следующее:

....

int highest=0, lowest=0, bar=WindowBarsPerChart();

for(int shift=0;shift<bar;shift++)

{

double indie=iCustom(.........,shift);

if(highest<indie) highest=indie;

if(lowest==0) lowest=indie;

if(lowest>indie) lowest=indie;

}

.....

Примечание: этот код рассчитывает и текущую открытую свечу, если вы хотите рассчитывать только закрытую свечу, используйте shift=1.

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

Арди

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

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false)

далее...

:: используйте эти позиции баров для нахождения результатов iHighest и iLowest

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

:: results & done , не используйте никаких циклов в этом!

 

Программное обновление индикатора перерисовки

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

Я ищу способ обновлять индикатор перерисовки каждые x минут.

Единственный способ обновить его в настоящее время - это щелкнуть по индикатору на графике, а затем нажать "ОК". Можно ли автоматизировать это с помощью кода MQL4?

Я нашел кое-что на сайте codersguru, Programmatically Refresh your charts | www.metatrader.info, но, кажется, это не работает для меня. Или есть кто-нибудь, кто пробовал это и получил другой результат (работает)?

Спасибо

 

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

Я хочу подсчитать количество раз, когда условие истинно только один раз за бар. Компьютер суммирует много раз за бар. Что я делаю не так?

 
IngvarDagmar:
Извините за мой английский. Я хочу подсчитать количество раз, когда условие истинно только один раз за бар. Компьютер суммирует много раз за бар. Что я делаю не так?

Используйте функцию, подобную этой...

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

[/php]

Then put an if statement round your main code, like...

[php]

if(NewBar() == true){

// do the main processing here

}

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

Lux

 

Это было мило с твоей стороны, Лакс.

Я нашел вот это:

Обрабатывать каждый бар только один раз - MQL4 форум

Automated 2008.01.15 18:54 Вы можете выполнить свой код на самом первом тике нового бара (т.е. сразу после закрытия предыдущего бара).

Вот функция, которая будет возвращать TRUE, если только что сформировался новый бар:

// Эта функция возвращает TRUE при первом тике нового бара, т.е. после закрытия предыдущего бара.

bool NewBar()

{

if(PreviousBarTime<Time[0])

{

PreviousBarTime = Time[0];

return(true);

}

return(false); // в случае, если оператор if - else не выполняется

} вам нужно объявить datetime PreviousBarTime в начале вашего советника...

тогда в вашем коде вы можете просто использовать

if ( NewBar() )

{

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

} спасибо

automatedfx@gmail.com

---------------------------------------------------

Я заметил, что вы использовали STATIC... Я посмотрел... в чем преимущество использования STATIC перед глобальной переменной?

 

ea с несколькими входами

пожалуйста, помогите. я хотел бы найти или мне нужна помощь в создании ea со следующими входными параметрами. четыре отдельных торговых входа, каждый из которых имеет количество лотов, стоп лосс, трейлинг стоп, безубыток и цель прибыли. сделки будут открываться при нажатии на кнопку советника.

спасибо

 

Нужна помощь по опции трейлинг-стоп

Я нашел этот советник на форуме MQL4, довольно интересный советник.

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

themastermind2.mq4

Файлы:
 

Привет всем...

У меня проблема с советником, который я написал... фактически, советник основан на индикаторе MACD... когда MACD становится в форме "n", открывается пост на продажу, а когда MACD становится в форме "u", советник открывает пост на покупку...

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

Вот код.

extern double TakeProfit = 20;

extern double Lots = 0.1;

extern double StopLoss = 20;

extern double MagicNumber = 17384;

extern int FastEMA=12;

extern int SlowEMA=26;

extern int SignalSMA=9;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

double MacdBuffer1[];

double MacdBuffer2[];

double MacdBuffer3[];

double MacdBuffer4[];

double MacdBuffer5[];

double MacdBuffer6[];

double MacdBuffer7[];

double MacdBuffer8[];

int init()

{

//----

//SetIndexBuffer(0, lag1_buffer);

//SetIndexBuffer(1, lag2_buffer);

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

int limit;

int counted_bars=IndicatorCounted();

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd counted in the 1-st buffer

for(int i=0; i<limit; i++)

MacdBuffer1=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

MacdBuffer2=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);

MacdBuffer3=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+1);

MacdBuffer4=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-2);

MacdBuffer5=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+2)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+2);

MacdBuffer6=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-3);

MacdBuffer7=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i+3)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i+3);

/*Alert( "MacdBuffer7 =",MacdBuffer7);

Alert( "MacdBuffer5 =",MacdBuffer5);

Alert( "MacdBuffer3 =",MacdBuffer3);

Alert( "MacdBuffer1 =",MacdBuffer1);

Alert( "MacdBuffer2 =",MacdBuffer2);

Alert( "MacdBuffer4 =",MacdBuffer4);

Alert( "MacdBuffer6 =",MacdBuffer6);*/

//----

int ticket_buy, ticket_sell, total;

total=OrdersTotal();

//MACD become 'u' shape

if (MacdBuffer7>MacdBuffer5&&MacdBuffer5>MacdBuffer3&&MacdBuffer3>MacdBuffer1

&&MacdBuffer1<MacdBuffer2&&MacdBuffer2<MacdBuffer4&&MacdBuffer4<MacdBuffer6)

{

if (total < 1) {

ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"scalp 1 min - buy",MagicNumber,0,Green);

if(ticket_buy>0)

{

if(OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

} else {

}

}

//MACD become 'n' shape

if(MacdBuffer7<MacdBuffer5&&MacdBuffer5<MacdBuffer3&&MacdBuffer3<MacdBuffer1

&&MacdBuffer1>MacdBuffer2&&MacdBuffer2>MacdBuffer4&&MacdBuffer4>MacdBuffer6)

{

if (total < 1) {

ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"scalp 1 min - sell",MagicNumber,0,Red);

if(ticket_sell>0)

{

if(OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

} else {

}

}

//----

return(0);

}

//+------------------------------------------------------------------+

Надеюсь, кто-нибудь поможет мне решить проблему. Я не силен в программировании кодов. Спасибо.

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