double ATR_Max() {
int i;
double m;
datetime tim;
iATR_H1_PER = 15;// периодif ( tim != Time[0] ) {
while( i < WindowBarsPerChart() ) {
double a = iATR( NULL, 0, iATR_H1_PER, i );
if ( m < a ) {
m = a;
}
i++;
tim = Time[0];
}
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}
Boeing747 : мне кажется tim = Time[0] лучше бы поставить после цикла ..а то запрос Time[0] ведется на всем количестве видимых баров - это не рационально.
Спасибо, что поправили. Ночью количество ошибок растет с геометрической прогрессией))))
Добрый день. Подскажите, есть ли возможность в mql4 менять на лету параметры индикатора? Задумка простая: на график установлен индикатор ZigZag. Написать скрипт, повесить на него горячую клавишу, по нажатию на которую будут меняться параметры зигзага на графике.
Таким образом функция проверяет значения двух предыдущих баров и если они слишком большие то функция возвращает TRUE. Вопрос, как ее красиво доработать, чтобы функция искала большие свечи на большем количестве свечей. Например 24.
satorifx : Добрый день. Подскажите, есть ли возможность в mql4 менять на лету параметры индикатора? Задумка простая: на график установлен индикатор ZigZag. Написать скрипт, повесить на него горячую клавишу, по нажатию на которую будут меняться параметры зигзага на графике.
Составил самопальный советник для тестирования торговли, но ни как не могу докумекать до одной вещи...
открытие Bay/sell происходит по максимальным и минимальным МА
// Условие открытие позиции BUY if(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
// Условие открытие позиции SELL if(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
#include <b-Lots.mqh>externdouble TrailingStop = 30;
externdouble Sploss = 15;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start() {
double HA_up,HA_dw;
double MA_H0,MA_H1,MA_L0,MA_L1,MA_0,MA_1;
int i, cnt, ticket, total;
bool flag=true;
if(Bars<100) {
Print("bars less than 100");
return(0);
}
// Проверяем стоит ли открываться
cnt=OrdersHistoryTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY )) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
cnt=OrdersTotal()-1;
for(i=cnt;i>=0;i--) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderOpenTime()>=Time[0]) { // Time[0] - если позиция открывается на нулевом баре текущего символа
flag=false;
break;
}
}
if(!flag) return(0);
//-----------------------------------------------
MA_H0=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,0);
MA_H1=iMA(0,0,3,0,MODE_SMA,PRICE_HIGH,1);
MA_0=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,0);
MA_1=iMA(0,0,3,0,MODE_EMA,PRICE_MEDIAN,1);
MA_L0=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,0);
MA_L1=iMA(0,0,3,0,MODE_SMA,PRICE_LOW,1);
HA_up=iCustom(0,0,"Heiken Ashi",3,0);
HA_dw=iCustom(0,0,"Heiken Ashi",2,0);
//задали все данные
total=OrdersTotal();
if(total<1)
{
// Проверка свободной маржиif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// Условие открытие позиции BUYif(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Bid-Sploss*Point,0,"",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
elsePrint("Error opening BUY order : ",GetLastError());
return(0);
}
// Условие открытие позиции SELLif(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
{
Lots=GetSizeLot();
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Ask+Sploss*Point,0,"",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
elsePrint("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // длинная позиция открыта
{
if(NormalizeDouble (MathAbs(MA_H0-Bid),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
return(0);
}
// трейлинг-стоп для длинной позицииif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else
{
if(NormalizeDouble (MathAbs(MA_L0-Ask),Digits)<Point)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
return(0);
}
// трейлинг-стоп для короткой позицииif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
Вопрос: позиция на текущей свече не закрылась (условия не наступили), как сделать чтобы сразу на следующей свече она закрылась при совпадении с MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );
Есть условие закрытие : пересечение максимума либо минимума на текущей свече, но нужно еще чтобы на следующей свече после открытия позиции позиция могла закрыться.
можно прописать if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), но как соблюсти условие второй открытой свечи.
Неужели надо быть семь пядей во лбу, чтобы понять, если на форум с вопросом пришел новый человек, то ему нужно конкретное решение или ссылка на что-то похожее, а не тупая отмазка, что "все возможно"?
Неужели надо быть семь пядей во лбу, чтобы понять, если на форум с вопросом пришел новый человек, то ему нужно конкретное решение или ссылка на что-то похожее, а не тупая отмазка, что "все возможно"?
Тут помогают тем, кто сам пытается что-то делать. Направляют в нужную сторону, объясняют и т.д. ...
Вы задали вопрос - вам ответили. А вы попытались сами хоть что-нибудь начать писать?
Задавая вопрос в определённом формате, сначала подумайте, а какой ответ вы получите на формат вопроса...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Итак, надеюсь конечный вид функции.
Итак, надеюсь конечный вид функции.
Итак, надеюсь конечный вид функции.
мне кажется tim = Time[0] лучше бы поставить после цикла ..а то запрос Time[0] ведется на всем количестве видимых баров - это не рационально.
Спасибо, что поправили. Ночью количество ошибок растет с геометрической прогрессией))))
Задумка простая: на график установлен индикатор ZigZag. Написать скрипт, повесить на него горячую клавишу, по нажатию на которую будут меняться параметры зигзага на графике.
Продолжая актуальную тему по поиску фильтра высокой волатильности. Приведу код имеющегося фильтра из WSR
int init()
Вот сама функция:
Таким образом функция проверяет значения двух предыдущих баров и если они слишком большие то функция возвращает TRUE. Вопрос, как ее красиво доработать, чтобы функция искала большие свечи на большем количестве свечей. Например 24.
Добрый день. Подскажите, есть ли возможность в mql4 менять на лету параметры индикатора?
Задумка простая: на график установлен индикатор ZigZag. Написать скрипт, повесить на него горячую клавишу, по нажатию на которую будут меняться параметры зигзага на графике.
Составил самопальный советник для тестирования торговли, но ни как не могу докумекать до одной вещи...
Вопрос: позиция на текущей свече не закрылась (условия не наступили), как сделать чтобы сразу на следующей свече она закрылась при совпадении с MA_0= iMA ( 0, 0, 3, 0, MODE_EMA, PRICE_MEDIAN, 0 );открытие Bay/sell происходит по максимальным и минимальным МА
// Условие открытие позиции BUY
if(MA_L1<MA_L0&&Ask<=MA_L0&&MA_0>MA_1&&HA_up>HA_dw)
// Условие открытие позиции SELL
if(MA_H1>MA_H0&&Bid>=MA_H0&&MA_0<MA_1&&HA_up<HA_dw)
Есть условие закрытие : пересечение максимума либо минимума на текущей свече, но нужно еще чтобы на следующей свече после открытия позиции позиция могла закрыться.
можно прописать if ( NormalizeDouble ( MathAbs (MA_0-Ask), Digits )< Point ), но как соблюсти условие второй открытой свечи.
Если можно ответьте с кодом, с примером понятнее.
Есть такая возможность.
Спасибо за невероятно подробный ответ.
Неужели надо быть семь пядей во лбу, чтобы понять, если на форум с вопросом пришел новый человек, то ему нужно конкретное решение или ссылка на что-то похожее, а не тупая отмазка, что "все возможно"?
Спасибо за невероятно подробный ответ.
Неужели надо быть семь пядей во лбу, чтобы понять, если на форум с вопросом пришел новый человек, то ему нужно конкретное решение или ссылка на что-то похожее, а не тупая отмазка, что "все возможно"?
Тут помогают тем, кто сам пытается что-то делать. Направляют в нужную сторону, объясняют и т.д. ...
Вы задали вопрос - вам ответили. А вы попытались сами хоть что-нибудь начать писать?
Задавая вопрос в определённом формате, сначала подумайте, а какой ответ вы получите на формат вопроса...