[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 303
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вариантов куча, запись в файл времени открытия например, но проще листать открытые ордера и сравнивать время жизни.
А вообщем перефразируйте ... "Необходимо закрывать все открытые позиции через указанный промежуток времени" для каждой отдельной позиции (я так понял вопрос).
Скрипт так просто не найдет время тестера (но индикатор найдет), можно в старт тест.советника прикрепить
быстро и надежно ...
Пытаюсь написать иникатора. Не пойму почему перерисовывает. Кроме того рисует только на визуализации. Помогите пожалуйста. Я в програмировании новичек.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Red
//---- input parameters
extern int N;
datetime some_time=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- buffers
double RLB_Buffer[];
double RLB_Buffer_1[];
double Real_Line_Balanse=0,x=0,last_high,last_low,RLB,Real_Line_Balanse_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong,first;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicator line
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 159);
SetIndexBuffer(1,RLB_Buffer_1);
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
Comment(i," ",ii);
//----
if(Bars < 3)
return(0);
//----------
first_t_bar=iBarShift(NULL,0,some_time,false); //бар начала тренда наверх
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //последний бар, самый правый
i=counted_bars-first_t_bar+1;
//------------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); //бар начала тренда вниз
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //последний бар, самый правый
ii=counted_bars-first_t_bar_1+1;
// if(IsVisualMode()==TRUE) i=first_t_bar-counted_bars-1; //если визуализация, то бар начала тренда
if(counted_bars == 0)
{
first = false;
i=first_t_bar+1;
ii=first_t_bar_1+1;
}
//------------ //минус посчитанные бары
dirlong = false;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) //если тренд наверх
{
while(i>=0)
{
x++; //счетчик баров от начала тренда
Real_Line_Balanse=Close[i+5]; //подсчет суммы клозов от тренда
RLB=Real_Line_Balanse;
if(RLB<Low[1]) RLB_Buffer[i]=Real_Line_Balanse; //показывать линию только если цена вверху
//-------
if(RLB>Close[i]&& x>50) //если цена пересекла RLB сверху вниз
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//то определяем ВЕРШИНУ между
//последним баром и началом тренда
some_time_1=Time[bar_high]; //новое начало тренда вниз
x=0; //обнуление счетчика баров от начала тренда
Real_Line_Balanse=0;
}
i--;
}//while
//-------
}//dirlong
//---------------------
//---------------------
if(dirlong == false) //если тренд вниз
{
while(ii>=0)
{
x1++; //счетчик баров от начала тренда
Real_Line_Balanse_1=Close[ii+10]; //подсчет суммы клозов от тренда
RLB_1=Real_Line_Balanse_1;
if(RLB_1>High[1]) RLB_Buffer_1[ii]=Real_Line_Balanse_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //если цена пересекла RLB сверху вниз
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//то определяем НИЗИНУ между
//последним баром и началом тренда
some_time=Time[bar_low]; //новое начало тренда вверх
x1=0; //обнуление счетчика баров от начала тренда
Real_Line_Balanse_1=0;
}
ii--;
}//while
//-------
}//dirlong
//---------------------
return(0);
}
//+------------------------------------------------------------------+
Какая то ерунда. Вместо
i=counted_bars-first_t_bar+1;
поставил конструкцию которая сама считает посчитанные бары. ВСЕ стало идти нормально. IndicatorCounted(); глючит или я не догоняю чего то...
как сообщить переменной о статусе закрытого ордера?
Какая то ерунда. Вместо
i=counted_bars-first_t_bar+1;
поставил конструкцию которая сама считает посчитанные бары. ВСЕ стало идти нормально. IndicatorCounted(); глючит или я не догоняю чего то...
Вы используете while(i>=0), значит при появлении новой свечи i=1 (ну чтоб наверняка данные предыдущей свечи рассчиталась по зафиксированным данным один раз).
Зачем вводить some_time=D'1971.01.11 00:00'; используйте Bars, IndicatorCounted не глучит у меня (ну и ошибка наверно из за этого first_t_bar).
Ваш алгоритм и вам его лечить.
"Я в програмировании новичек." с 2007года )).
как сообщить переменной о статусе закрытого ордера?
:)
+ ...
Для Виталюхи:
https://docs.mql4.com/ru/trading/OrderStopLoss
https://docs.mql4.com/ru/trading/OrderTakeProfit
Проблема в следующем - советник постоянно повторно открывает ордера, т.е. есть сигнал на бай - он окрывает ордер, потом закрывает его по профиту, а условия все еще сохраняются он его открывает вновь. нужно чтобы после других сигналов он открывался только.
я подумал что можно устранить с помощью обычного счетчика баей и селов - если ордер бай открылся счетчик +1, и новый бай нельзя открыть пока счетчик больше 0, обнуляется счетчик только после того как будет сел. но почему то не работает не могу понять почему??? посмотрите логику может я где-то ошибся?? метры mql точно сталкивались с подобной проблемой.