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

 
Не могу справиться с    это эмуляция нажатие кнопки Pause-Break  , чёт не работает!
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=20 ;                          
  extern double  takeprofit=50 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){if (!IsVisualMode()) return(0);keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
----------------------------------+
int start()
  {
//----

            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, 1);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, 1);
            
            int BUY=0,SELL=0;int ticket; 
            Print (  " strela1 " , strela1 , "   strela2  " , strela2 );BreakPoint();
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0){    
            
           OrderSend( NULL, OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
 NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);  
            Print( "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError());BreakPoint(); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }
 
АА! 2012.10.30 14:07:08 2012.06.05 05:30 советник EURUSD,M30: dll calls are not allowed; 'user32.dll'-'keybd_event'  Кажется, я догадался. Как разришить ему длл???
 
Не, вроде нормаль!!!
 
Буферы всегда все в тесте 0 !!  Чёрт с ним, буду на реале тестить- цикл фор напишу на 200 баров назад, и буду искать точки входа! 
 
Прошу прощения, уже пол-часа ищу где у миня скобки не сбалансированы, или как это понять??? Вписал принты-и понесло... Не компилируется, а ругается так '\end_of_program' - unbalanced left parenthesis C:\Àëüïàðè\experts\ñîâåòíèê.mq4 (94, 1)
 
Вот, прошу прощения..   Перещитал скобки 8 раз- ну сбалансированы! Сбалансированы!    Или нет??
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot=1;                          
  extern int taymfreym=0 ;                           
  extern double  stoplos=20 ;                          
  extern double  takeprofit=50 ; 
  extern double  magicnumber=350 ;                          


void BreakPoint(){if (!IsVisualMode()) return(0);keybd_event(19,0,0,0);
Sleep(10);
keybd_event(19,0,2,0);}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  init " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {Print (   "  Начало " ); 
//----
for( int A=0; A<100 ; A++){
            
            double strela1 = iCustom(NULL, taymfreym, "индикатор", 2, A);
            double strela2 = iCustom(NULL, taymfreym, "индикатор", 3, A);
            
            int BUY=0,SELL=0;int ticket; 
            Print ( A,  "  strela1 " , strela1 , "    strela2  " , strela2 ); 
            
    
            
            for(int i=1; i<=OrdersTotal(); i++) {  
            if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symbol( ) )continue;      // Не наш фин. инструм
         if (OrderMagicNumber( ) !=magicnumber)continue;
         if (OrderType()==0){ BUY++; ticket=OrderTicket( );}
         if (OrderType()==1) {SELL++;ticket=OrderTicket( );}    } }
         
   if (strela1>strela2&&BUY==0&&SELL==0)    {    
            
           OrderSend( Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits),  
          NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE); 

 
            Print(
          "strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,
     "   NormalizeDouble( Bid- (stoplos*Point),Digits)  ", NormalizeDouble( Bid- (stoplos*Point),Digits),"  
         NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits)); }
           
   if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
           NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError()  ,"  Bid ",Bid,
   "   NormalizeDouble( Ask- (stoplos*Point),Digits)  ", NormalizeDouble( Ask- (stoplos*Point),Digits),
  "    NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble( Bid+( takeprofit*Point),Digits); }
            
 
   if (strela1>strela2&&BUY==0&&SELL!=0){ 

         OrderSelect(ticket, SELECT_BY_TICKET);
       OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
       OrderSend(Symbol( ), OP_BUY, lot, Ask, 3, NormalizeDouble( Bid- (stoplos*Point),Digits), 
       NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
       Print( "strela1>strela2&&BUY==0&&SELL!=0 " , GetLastError());BreakPoint(); }
            

  if (strela1<strela2&&SELL==0&&BUY!=0){ 
   OrderSelect(ticket, SELECT_BY_TICKET);
   OrderClose(  ticket , OrderLots( ) , OrderOpenPrice( ) , 3, CLR_NONE);                 
   OrderSend(Symbol( ), OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
        Print( "strela1<strela2&&SELL==0&&BUY!=0 " , GetLastError());BreakPoint(); }
      
      
            
     } Print (   "  Конец " );      
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Dimka-novitsek:
Прошу прощения, уже пол-часа ищу где у миня скобки не сбалансированы, или как это понять??? Вписал принты-и понесло... Не компилируется, а ругается так '\end_of_program' - unbalanced left parenthesis C:\Àëüïàðè\experts\ñîâåòíèê.mq4 (94, 1)

на первый взгляд не хватает самой последней фигурной скобки (для функции main())

у Вас код завершается ветвлением 

  if (strela1<strela2&&BUY==0&&SELL==0){  
   
            OrderSend( NULL, OP_SELL, lot, Bid, 3, NormalizeDouble( Ask- (stoplos*Point),Digits),  
 NormalizeDouble( Bid+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print( "strela1<strela2&&BUY==0&&SELL==   " , GetLastError());BreakPoint(); }

 ps это для кода приведенного выше

 
Спасибо!! Щас в код лучше гляну... А то ещё скобки на бумажку поштучно посчитал- сбалансированы!! 
 
А где там ветвление? Или я туп...  Ведь просто открываем ордер при условиях!
 
drknn:

...

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

P.S.

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


Хорошо. Постараюсь изложить суть задачи, возможно кто-то подскажет или поможет ее реализовать более просто.

Работаем на минутном графике. Берем минутный бар (high+low/2 - среднее значение бара) на графике 29/10/12 в 00:00 - это будет точкой отсчета.

Далее проверяем отклонение от данной цены на 10 пунктов вверх (каждое верное отклонение будет +1).

Когда достигаем поднятие цены на 10 пунктов от стартовой точки - счетчик +1; и начинаем проверку отклонений дальше, только уже от той точки в которой мы достигли отклонения на 10 пунктов, и ждем следующего поднятия цена на 10 пунктов.

К примеру получаем:

Если (стартовая точка) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов).

Если (стартовая точка + 10 пунктов) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов) + 10 пунктов.  

Если (стартовая точка + 10 пунктов + 10 пунктов) + 10 пунктов <= цены (используем все последующий цены баров от точки отсчета.) Получаем счетчик=счетчик +1; И стартовую точку начинаем уже от этого места - (стартовая точка + 10 пунктов + 10 пунктов) + 10 пунктов.  

и так далее...

 Пока не достигнем счетчика равному 10 (счетчика == 10).

 И каждый новый образованный минутный бар (high+low/2 - среднее значение бара) проверяем на это условие и ждем пока не достигнем счетчика равному 10 (счетчика == 10). Допустим прошло два дня, каждый новый образованный бар мы проверяли и смещались если условия были верны ....

И когда мы достигли счетчик =10 - Выводим сообщение что "Счетчик == 10". Смещаем стартовую точку на 2 дня вперед от первоначально заданной пользователем т.е. с 29/10/12 в 00:00 на 31/10/12 в 00:00 и повторяем цикл.

Повторяем цикл и так двигаемся по графику. 

Т.е. нужно брать новую образованные бары, по нить брать  (high+low/2 - среднее значение бара). И проверять на условия и если условия верны смещать как написано выше.

Я пытался это реализовать через массив, получается очень запутано и значения выдает не те!! Помогите как реализовать данный алгоритм! 

Причина обращения: