Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это подходит для цены. Он хочет найти самый высокий и самый низкий показатель идикатора.
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.
Надеюсь, это поможет,
Арди
Программное обновление индикатора перерисовки
Здравствуйте,
Я ищу способ обновлять индикатор перерисовки каждые x минут.
Единственный способ обновить его в настоящее время - это щелкнуть по индикатору на графике, а затем нажать "ОК". Можно ли автоматизировать это с помощью кода MQL4?
Я нашел кое-что на сайте codersguru, Programmatically Refresh your charts | www.metatrader.info, но, кажется, это не работает для меня. Или есть кто-нибудь, кто пробовал это и получил другой результат (работает)?
Спасибо
Извините за мой английский.
Я хочу подсчитать количество раз, когда условие истинно только один раз за бар. Компьютер суммирует много раз за бар. Что я делаю не так?
Извините за мой английский. Я хочу подсчитать количество раз, когда условие истинно только один раз за бар. Компьютер суммирует много раз за бар. Что я делаю не так?
Используйте функцию, подобную этой...
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);
}
//+------------------------------------------------------------------+Надеюсь, кто-нибудь поможет мне решить проблему. Я не силен в программировании кодов. Спасибо.