Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
bool order= 0;
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Ваша двойная декларация билета.
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Объявление ticket скрывает ... бла бла бла ? Видите, я человек-компилятор.
Удалите второй int.
Я поставил
bool заказ и
int ticket
на глобальные переменные, а остальной код на OnTick, но все равно теперь не делает никаких записей.
Не скомпилировано, не проверено
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Марко: Я удалил дублированный int, но теперь торговля не производится, мне нужна 1 сделка, если цена> облако ихмоку, этот код сначала был замечательным, но он продолжал создавать новые сделки, если
цена была выше облака, мне просто нужна помощь, чтобы написать код таким образом, чтобы скрипт остановился после 1 сделки.
Honest Knave: Я попробовал ваш код, я просто определил magic_no, которого не хватало, он работает отлично, он ждет новой сделки, когда цена снова коснется облака, это действительно будет полезно для следующих проектов, но
мне просто нужно, чтобы он останавливался после 1º сделки, что мне делать?
Спасибо всем за помощь
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Вот в чем проблема.
int ticket;
void OnTick()
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>-1)
{
order=1;
}
}
}
}
Попробуйте это, и я указал на это несколько сообщений назад.
Также обратите внимание, что OrderSend либо возвращает номер билета, либо -1 минус один, если он не работает.
Honest Knave: Я попробовал ваш код, я просто определил magic_no, которого не хватало, он работает отлично, он ждет новой сделки, если цена снова коснется облака, это действительно будет полезно для следующих проектов, но
мне просто нужно, чтобы он останавливался после 1 сделки, что мне делать?
Спасибо всем за помощь
Он не должен торговать больше, чем 1...? Вот что это делает:
{
double up = iIchimoku(NULL,5,9,26,52,3,0),
down = iIchimoku(NULL,5,9,26,52,4,0);
static bool was_above = true;
bool is_above = (MathMax(up,down)< Bid);
if(!was_above && is_above && open_orders()<1)
{
if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
{
printf("OrderSend() failed. Error code: %i",GetLastError());
}
}
was_above = is_above;
}
int open_orders()
{
int count = 0;
for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
{
if(!OrderSelect(i,SELECT_BY_POS)) continue; // select the order
if(OrderSymbol() != _Symbol) continue; // optional check for same symbol
if(OrderMagicNumber()!= magic_no) continue; // optional check for magic number
if(OrderType() < 2) count++; // 0 == OP_BUY and 1 == OP_SELL
}
return(count);
}
Honest Knave:
Ваш советник великолепен, но он создает новые сделки, если цена снова опускается до облака Ишимоку, а затем возвращается вверх. Он не повторяет ордера на той же свече, как проблема, которая была у меня, и я многому научусь на этом примере, который вы мне дали, чтобы создавать новые сделки.
Но мне нужно, чтобы после первой сделки советник или скрипт сразу же закрывался, так что мне нужна только одна сделка.
Марко: Я попробовал ваше новое обновление, но оно не делает ни одной сделки, я ввел все так, как вы написали в последнем сообщении, только удалил второй int, в тикете. Но в тестере стратегий первая сделка так и не сделана, что теперь делать?
Honest Knave:
Ваш советник великолепен, но он создает новые сделки, если цена снова опускается до облака Ишимоку, а затем возвращается вверх. Он не повторяет ордера на той же свече, как проблема, которая была у меня, и я многому научусь на этом примере, который вы мне дали, чтобы создавать новые сделки.
Но мне нужно, чтобы после первой сделки советник или скрипт сразу же закрывался, так что мне нужна только одна сделка.
Я не понимаю, что вы имеете в виду.
Этот код не может открыть более 1 ордера за раз.
Но если ордер закроется, и триггер произойдет снова, он откроет еще один.
Вы имеете в виду, что хотите, чтобы только одна сделка открывалась ЕЖЕДНЕВНО?
Я не понимаю, что вы имеете в виду.
Этот код не может открыть более 1 ордера за раз.
Но если ордер закроется, и триггер произойдет снова, он откроет еще один.
То есть вы хотите, чтобы только одна сделка открывалась ЕЖЕДНЕВНО?