Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1134
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые программисты прошу помочь новичку в этом деле.
советник последовательно через определенное время открывает ордера как на покупку так на продажу. Мне нужно чтоб он после открытия последнего ордера модифицировал все предыдущие,(ну если уже конкретно,то чтоб у всех предыдущих закрытие осуществлялось по тейкпрофиту последнего. Т.е. если последний бай а предыдущий селл, то у предыдущего стоп лос ставится на уровень тейкпрофита последнего,
если предыдущий бай то его тейпрофит ставится на уровень последнего тейкпрофита. ну и т.д. Смысл в том, что при наступлении тейкпрофита последнего ордера должны закрыться все ордера.).
Надеюсь объяснил понятно, хотя трудно понимаю как это реализовать. Заранее спасибо.
Я понимаю что можно перебрать все открытые ордера и модифицировать но как пропустить последний?
Самое главное во всём этом, это понимание того, что должно происходить.
Что такое "последний ордер"? Последний по времени открытия? Или по уровню цены открытия?
А если посчитать "последним" ордер BUY а цена пойдёт на йух? Или наоборот, последний будет SELL а цена прёт на север? Тогда какой надо считать последним? Вот именно это и надо понять для реализации задуманного.
Здравствуйте. Если за ране не знать сколько элементов будет в массиве, как объявлять массив, чтобы увеличивался массив с каждым новым элементом?
Пример для того чтобы понятнее было:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Здравствуйте. Если за ране не знать сколько элементов будет в массиве, как объявлять массив, чтобы увеличивался массив с каждым новым элементом?
Пример для того чтобы понятнее было:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
HighA[i]=A[i];
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Чаще надо читать документацию.
Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Когда не выполняется условие A[i] < B[i] размер массива остаётся неизменным, а счётчик цикла увеличивается. Потому и выход за пределы...
Так попробуй
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Когда не выполняется условие A[i] < B[i] размер массива остаётся неизменным, а счётчик цикла увеличивается. Потому и выход за пределы...
Так попробуй
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
int size = ArraySize(HighA);
ArrayResize(HighA, size+1);
HighA[size]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Я читал и пробовал но получал ошибку "array out of range". На примере это выглядела так:
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[i]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ну так будет работать быстрее
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Ну так будет работать быстрее
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines);
HighA[countHlines-1]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
// Вариант №2
int countHlines=-1;
double HighA[];
for(int i=0; i<1000; i++)
{
if(A[i]<B[i])
{
countHlines++;
ArrayResize(HighA,countHlines+1);
HighA[countHlines]=A[i];
}
}
Print(">>>>>>>>>>>..ArraySize(HighA)= ",ArraySize(HighA));
Спасибо, ясно! Будет работать быстрее из за ArraySize, это как-то замедляет?
Незначительно, но зато понятно и застрахован от ошибки.