Кто знает подскажите

 

Уважаемые специалисты! Помогите, пожалуйста новичку-любителю:) в создании кода для открытия сделки. Что мне нужно дописать, чтоб при данных условиях сделки открывались только при первом сигнале. К примеру не чаще чем раз в сутки. Заранее всем огромное спасибо за помощь.

void CheckForOpen()

{
int res;
double high_0=iHigh(NULL,PERIOD_D1,0);
double low_0=iLow(NULL,PERIOD_D1,0);
double high_1=iHigh(NULL,PERIOD_D1,1);
double low_1=iLow(NULL,PERIOD_D1,1);


if(low_1>=low_0)
{

res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",SerialNumber,0,Red);
return;
}

if(high_0>=high_1)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",SerialNumber,0,Blue);
return;
}
}
 

Возможно что-то типа:

datetime      Time_Handle               = 0;

start() {
      . . . 
      if(Time[i]!=Time_Handle) ) {
         Time_Handle                    = Time[i];

      . . . 
}
 
chief2000:

Возможно что-то типа:


Спасибо за ответ, но что-то н получается. Так он вообще не открывает сделки. Я вот пробовал вызвать предыдущий ордер из истории, но так он только одну сделку открывает, а потом все. Может здесь нужно что-то скорректировать?...


for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) return;
}

 
KLMNC:

Спасибо за ответ, но что-то н получается. Так он вообще не открывает сделки. Я вот пробовал вызвать предыдущий ордер из истории, но так он только одну сделку открывает, а потом все. Может здесь нужно что-то скорректировать?...


for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) return;
}

Вам необходимо проверить, удовлетворяет ли ордер, который Вы запрашиваете из истории, Вашему временному промежутку, например так:

if (Day()==TimeDay(OrderOpenPrice())) то это тот ордер, который вы искали
 
nadya:

Вам необходимо проверить, удовлетворяет ли ордер, который Вы запрашиваете из истории, Вашему временному промежутку, например так:

if (Day()==TimeDay(OrderOpenPrice())) то это тот ордер, который вы искали

Вот так это должно выглядеть?

for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) {
if (Day()==TimeDay(OrderOpenPrice()))return;
}
}
 
KLMNC:

Уважаемые специалисты! Помогите, пожалуйста новичку-любителю:) в создании кода для открытия сделки. Что мне нужно дописать, чтоб при данных условиях сделки открывались только при первом сигнале. К примеру не чаще чем раз в сутки. Заранее всем огромное спасибо за помощь.

void CheckForOpen()

{
int res;
double high_0=iHigh(NULL,PERIOD_D1,0);
double low_0=iLow(NULL,PERIOD_D1,0);
double high_1=iHigh(NULL,PERIOD_D1,1);
double low_1=iLow(NULL,PERIOD_D1,1);


if(low_1>=low_0)
{

res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",SerialNumber,0,Red);
return;
}

if(high_0>=high_1)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",SerialNumber,0,Blue);
return;
}
}

0. Изучить правила форума

1. прочитать учебник

2. разобрать примеры экспертов, как в учебнике, так и стандартные, которые идут с терминалом

3. воспользоваться поиском по форуму и найти решение аналогичных задач

И самое главное - писать в ветку для новичков !

ЗЫ если у Вас нет хоть какого-нибудь образования в области программирования - начните оттуда: при наличии знаний в области программирования такие вопросы вообще не возникают - достаточно учебника и хелпа.

А это

Спасибо за ответ, но что-то н получается. Так он вообще не открывает сделки. 
Я вот пробовал вызвать предыдущий ордер из истории, но так он только одну 
сделку открывает, а потом все. Может здесь нужно что-то скорректировать?...


for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) return;
}

показывает то, что учебник Вы даже читать не пытались да и Ваши познания в программировании под вопросом - уважайте чужое время.

 

Если я правильно понял то что вы хотите сделать (очень схематично):

datetime      Time_Handle                           = 0;
bool             Status_OrderSend                   = false;

 
start() {

    if(iTime(NULL,PERIOD_D1, 0)!=Time_Handle) ) {
         Time_Handle                     = iTime(NULL,PERIOD_D1, 0);
         Status_OrderSend             = false;
   }

 
    if(Status_OrderSend==false) {
     ...
     int res = -1;
     res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",SerialNumber,0,Blue) ;

      if(res!=-1) {
         Status_OrderSend = true; 
      } 

    }

} 

 
 
VladislavVG:

0. Изучить правила форума

1. прочитать учебник

2. разобрать примеры экспертов, как в учебнике, так и стандартные, которые идут с терминалом

3. воспользоваться поиском по форуму и найти решение аналогичных задач

И самое главное - писать в ветку для новичков !

ЗЫ если у Вас нет хоть какого-нибудь образования в области программирования - начните оттуда: при наличии знаний в области программирования такие вопросы вообще не возникают - достаточно учебника и хелпа.

А это

показывает то, что учебник Вы даже читать не пытались да и Ваши познания в программировании под вопросом - уважайте чужое время.


А я и не пишу, что я специалист. Поэтому и обращаюсь с такими глупыми вопросами. Поэтому и прошу помочь тех, у кого есть такая возможность. А что касается потраченного времени, то, на мой субъективный взгляд, Вы его потратили намного больше, написав свое истерическое высказывание, нежели могли бы потратить на подсказку по моему вопросу. На чем, собственно, и закончилось бы наше с Вами общение. Но и на этом спасибо.

Хорошего дня!:)

 
chief2000:

Огромное спасибо за помощь!
 
KLMNC:

Уважаемые специалисты! Помогите, пожалуйста новичку-любителю:) в создании кода для открытия сделки. Что мне нужно дописать, чтоб при данных условиях сделки открывались только при первом сигнале. К примеру не чаще чем раз в сутки. Заранее всем огромное спасибо за помощь.

void CheckForOpen()

{
int res;
double high_0=iHigh(NULL,PERIOD_D1,0);
double low_0=iLow(NULL,PERIOD_D1,0);
double high_1=iHigh(NULL,PERIOD_D1,1);
double low_1=iLow(NULL,PERIOD_D1,1);


if(low_1>=low_0)
{

res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",SerialNumber,0,Red);
return;
}

if(high_0>=high_1)
{
res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",SerialNumber,0,Blue);
return;
}
}
Открывайся в том случае, если ещё не открыт ордер. Как это сделать смотри стандартного советника MovinAverage.
 
KLMNC:

А я и не пишу, что я специалист. Поэтому и обращаюсь с такими глупыми вопросами. Поэтому и прошу помочь тех, у кого есть такая возможность. А что касается потраченного времени, то, на мой субъективный взгляд, Вы его потратили намного больше, написав свое истерическое высказывание, нежели могли бы потратить на подсказку по моему вопросу. На чем, собственно, и закончилось бы наше с Вами общение. Но и на этом спасибо.

Хорошего дня!:)


Если Вы реально хотите чему-либо научиться, то озвученный мной алгоритм действий может привести Вас к цели. Если просто пришли, привлеченные рекламой простоты заработка на FOREX, да еще и в надежде на заработки с помощью роботов, то не тратьте время: шары не будет - это долгая и упорная самостоятельная работа. На этом форуме охотно помогают пытающимся научиться, а то, как это пытаетесь сделать Вы - просто трата времени и своего, и чужого. Если это не понятно было сразу и мне пришлось пояснять - кто Вам доктор ?

Имеющий уши - да услышит, имеющий разум - да поймет.