[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 179

 
Rustbunch:

Помогите найти советника или скрипт, наверняка есть готовый...

Требуется, чтобы советник в определенное время открывал по рынку сделку с определенным лосем и профитом. Больше от него ничего не требуется...

Заранее благодарю. 

Любой советник это делает в МетаЭдиторе и соответствующие скрипты в нём же!

if(Hour() >= xx) открыть;
 
А то у меня учет ордеров массивом.Все пирепутется.
 
if (!PozyProstavleny){ ArrayResize(Buy,Raz);ArrayResize(Sell,Raz);
   
           Price= (Ask+Dist*Point) ; TP_BUY=(Price+TP*Point);  SL_BUY= (Price- SL*Point);
           Price_SELL= (Bid-Dist*Point) ;  TP_SELL=Price_SELL-TP*Point;  SL_SELL=Price_SELL+SL*Point; K=1;
           
   for(int Raz1=0;Raz1<Raz;Raz1++){
   
           Sleep(2000); RefreshRates();  for(int A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено 
торговать или поток для выполнения торговых операций занят "); }           
  tyccBuy= OrderSend (Symbol( ), OP_BUYSTOP,  Lot ,NormalizeDouble(Price, Digits), 5, NormalizeDouble( SL_BUY,Digits),  
 NormalizeDouble( TP_BUY,Digits), NULL, 450, 0, CLR_NONE);
   Buy[Raz1]= tyccBuy;
           Price= (Price+Dist*Point) ; TP_BUY= (Price+TP*Point); SL_BUY= (Price- SL*Point);
           Error=GetLastError();
     if (Error!=0){ string errorcomment = "Ошибка открытия ордера байстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
           Print (errorcomment);}
           
           Sleep(2000); RefreshRates();  for( A=25;A>=0;A--){if(IsTradeAllowed())break;if(A==0) Comment(" эксперту не разрешено торговать
 или поток для выполнения торговых операций занят "); }        
           Sell[Raz1]=OrderSend (Symbol( ), OP_SELLSTOP,  Lot ,NormalizeDouble(Price_SELL, Digits), 5, NormalizeDouble( SL_SELL,Digits), 
  NormalizeDouble( TP_SELL,Digits), NULL, 450, 0, CLR_NONE);
     Price_SELL= (Price_SELL -Dist*Point) ;TP_SELL=Price_SELL-TP*Point;   SL_SELL=Price_SELL+SL*Point;
            Error=GetLastError();if (Error==0)
            
            {errorcomment = "Ошибка открытия ордера селлстоп  "  + " " + Symbol() +  " " + ErrorDescript(Error); 
        Print (errorcomment);} PozyProstavleny=1; 
                       }
                       }   
                        
 

Всем доброго времени суток!

Я новичок. Первый разы пытаюсь воплотить идею в код в тестере.

Идея простая - по цене открытия  каждой часовой  свечки открывать по одному  ордеру попеременно вверх и вниз.

Написал простой код .... но проблема в том,что на открытии одной свечи программа почему то  иногда  открывает  более  1 ордера.

Как мне кажется это происходит когда в течении 1 секунды приходят более 1 тика.

Как вариант пробовал в заголовок условия if( ) ставить..

OrdersTotal()==0

действительно открывается только один ордер.



 Но такой вариант мне не подходит так как на следующий день данная свеча не открывается,поскольку на момент открытия этой свечи

в торговле уже присутствуют разное  случайное количество ордеров.

Пробывал так же после строки     OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP); прерывать исполнение start()  при помощи return;   .... не помогло.


Буду всем признателен,если подскажете,как сделать так,что бы в течении 1 секунды открывался только 1 ордер на любом тике.

int start()   

  {
    double Price=Ask;   
    double SL=Price-300*Point;   
    double TP=Price+300*Point;
      if( Hour()==10 && Minute()== 00 && Seconds()==00)   
    OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
   }

 
И т.п. 
 
Dimka-novitsek:
Ну, не знаю как, но надо, что бы даные сохранялись.

//записать

void SaveArray(string File, double &a[])
{
    int h = FileOpen(File, FILE_BIN|FILE_WRITE);
    if(h>0)
    {
      int sz = ArraySize(a); 
      FileWriteArray(h,a,0,sz);
      FileClose(h);
    }
}

//прочитать

void OpenArray(string File, double &a[], int sz)
{
    int h = FileOpen(File, FILE_BIN|FILE_READ);
    if(h>0)
    {
      ArrayResize(a,sz);
      FileReadArray(h,a,0,sz);
      FileClose(h);
    }
}
 
solnce600:

Всем доброго времени суток!

Я новичок. Первый разы пытаюсь воплотить идею в код в тестере.

Идея простая - по цене открытия  каждой часовой  свечки открывать по одному  ордеру попеременно вверх и вниз.

Написал простой код .... но проблема в том,что на открытии одной свечи программа почему то  иногда  открывает  более  1 ордера.

Как мне кажется это происходит когда в течении 1 секунды приходят более 1 тика.

Как вариант пробовал в заголовок условия if( ) ставить..

OrdersTotal( )==0

действительно открывается только один ордер.



 Но такой вариант мне не подходит так как на следующий день данная свеча не открывается,поскольку на момент открытия этой свечи

в торговле уже присутствуют разное  случайное количество ордеров.

Пробывал так же после строки     OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP); прерывать исполнение start()  при помощи return;   .... не помогло.

Буду всем признателен,если подскажете,как сделать так,что бы в течении 1 секунды открывался только 1 ордер на любом тике.

int start()   

  {
    double Price=Ask;   
    double SL=Price-300*Point;   
    double TP=Price+300*Point;
      if( Hour()==10 && Minute()== 00 && Seconds()==00)   
    OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP);
   }

Если это ТехЗад, Вам в Работу!
 
Спасибо!!!!!!
 

solnce600:

Буду всем признателен,если подскажете,как сделать так,что бы в течении 1 секунды открывался только 1 ордер на любом тике.

int start()
{
...

int ot=OrdersTotal();

bool open_allowed = true;

if(ot>0)
{
   if(OrderSelect(ot-1,SELECT_BY_POS))
   {
      if(TimeCurrent()-OrderOpenTime()<=1) open_allowed=false;  //если разница между текущим временем сервера и временем открытия последнего ордера 1 секунда или меньше, запретить торговлю
   }
}

if(open_allowed)
{
   //открываемся
}
...
}
 
 Щас..  Примерно .Обьявите некую переменную перед стартом, запомните время.  После простановки ордера она равна, скажем, правде. Перед постановкой тоже проверка на нее. Я не силен во временных переменных. Перед ордерсендом проверка, если к этой переменной прибавить заданное время, будет ли оно больше настоящего. Если не больше, тогда ордерсенд, и вновь запоминаем новое время! Да, как-то так. Как бы даже просто!!! 
Причина обращения: