Ограниченная область видимость переменных, в которые записываются данные. Все переменные объявлены в теле функции OnTick(). Это означает, что за пределами этой функции таких переменных не существует. Зашли в OnTick(), создали переменную, записали в нее значение и оно попросту пропало при выходе из OnTick(). При следующем входе в OnTick() это совершенно другие переменные с другим данными.
Чтобы значения не пропадали, есть два способа:
- Объявить переменные в глобальной области видимости (вне всех функций).
- Сделать переменные статическими (почитайте про модификатор static).
Ребята, кто знает, подскажите пожалуйста. Почему номер тиккета не записывается в переменные tikket1, tikket2, ticket3 ?? А я хотел управлять ордерами по тиккету. Типы переменных объявил, вроде все правильно сделал.
Вот кусок кода:
void OnTick()
{
int ticket1;
int ticket1;
int ticket3;
double L1;
double L2;
double L3;
int OT1;
int OT2;
if(OrdersTotal()<1) //если открытых ордеров меньше чем один..
{
ticket1=OrderSend(Symbol(),OP_BUY,lot1,Ask,3,Bid-SL*Point,Bid+TP2*Point); //открыть ордер на покупку
Sleep(500);
ticket2=OrderSend(Symbol(),OP_SELLLIMIT,lot2,Bid+0.00200,3,Ask+(SL+200)*Point,Ask-(TP1-200)*Point); //выставить селл-лимит на 200 пунктов выше
Sleep(500);
ticket3=OrderSend(Symbol(),OP_SELLSTOP,lot1,Bid-0.00100,3,Ask+(SL-100)*Point,Ask-(TP2+100)*Point); //выставить селл стоп на 100 пунктов ниже
}
if(OrderSelect(ticket1,SELECT_BY_TICKET)==true) //выбрать ордер по тиккету ticket1
{
L1=OrderOpenPrice()-0.00100; //записать в переменную L1 значение выражения цена открытия минус 0.00100
}
if(Bid<L1) //если текущая цена бид станет меньше значения L1
{
OrderDelete(ticket2); //удалить селл-лимит
}
Спасибо ребята!!!
Действительно: номера тиккетов записывались в переменные на первом тике, а на следующем тике сразу обнулялись, я проверял функцией Comment();
Вынес эти переменные за пределы OnTick() и все сразу заработало. )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ребята, кто знает, подскажите пожалуйста. Почему номер тиккета не записывается в переменные tikket1, tikket2, ticket3 ?? А я хотел управлять ордерами по тиккету. Типы переменных объявил, вроде все правильно сделал.
Вот кусок кода:
void OnTick()
{
int ticket1;
int ticket2;
int ticket3;
double L1;
double L2;
double L3;
int OT1;
int OT2;
if(OrdersTotal()<1) //если открытых ордеров меньше чем один..
{
ticket1=OrderSend(Symbol(),OP_BUY,lot1,Ask,3,Bid-SL*Point,Bid+TP2*Point); //открыть ордер на покупку
Sleep(500);
ticket2=OrderSend(Symbol(),OP_SELLLIMIT,lot2,Bid+0.00200,3,Ask+(SL+200)*Point,Ask-(TP1-200)*Point); //выставить селл-лимит на 200 пунктов выше
Sleep(500);
ticket3=OrderSend(Symbol(),OP_SELLSTOP,lot1,Bid-0.00100,3,Ask+(SL-100)*Point,Ask-(TP2+100)*Point); //выставить селл стоп на 100 пунктов ниже
}
if(OrderSelect(ticket1,SELECT_BY_TICKET)==true) //выбрать ордер по тиккету ticket1
{
L1=OrderOpenPrice()-0.00100; //записать в переменную L1 значение выражения цена открытия минус 0.00100
}
if(Bid<L1) //если текущая цена бид станет меньше значения L1
{
OrderDelete(ticket2); //удалить селл-лимит
}