Zamykanie transakcji po weryfikacji

O jezykach programowania w platformach i nie tylko.
ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Zamykanie transakcji po weryfikacji

Nieprzeczytany post autor: ebate »

Witam, pisząc program napotkałem na pewne trudności. Otóż opracowałem taki otóż sposób zamykania transakcji:
Gram na wykresie M5. Po 10 minutach od zawarcia transakcji dochodzi do jej weryfikacji. Jeżeli po tych 10 minutach transakcja jest zyskowna, zostaje ona zamknięta dopiero po załamaniu trendu. Jeżeli transakcja jest stratna, zostaje ona zamknięta w momencie wyjścia na zero.
Aby program wykonywał określone polecenia, napisałem:

Kod: Zaznacz cały

double O_1 = iOpen("EURUSD", PERIOD_M5, 0);
      double O0 = iOpen("EURUSD", PERIOD_M5, 1);
      double O1 = iOpen("EURUSD", PERIOD_M5, 2);
//+---------------------------------------------------------------------------+
//|                       ***** Zamknięcie buy *****                          |
//+---------------------------------------------------------------------------+             
         
         for (int i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_BUY){ 
                  if (OrderOpenPrice() >= iOpen("EURUSD", PERIOD_M5, iBarShift("EURUSD", PERIOD_M5, (OrderOpenTime() + 600)))){
                     if(TimeCurrent()-OrderOpenTime()>=900){
                        if(O_1<O0&&O0>O1){
                           OrderClose(OrderTicket(),OrderLots(),Bid,0,LimeGreen);
                        }
                     }
                  }
               }
            }
         } 

         for (i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_BUY){ 
                  if (OrderOpenPrice() < iOpen("EURUSD", PERIOD_M5, iBarShift("EURUSD", PERIOD_M5, (OrderOpenTime() + 600)))){
                     if(TimeCurrent()-OrderOpenTime()>=600){
                        if(OrderOpenPrice()==Bid){
                           OrderClose(OrderTicket(),OrderLots(),Bid,0,LimeGreen);
                        }
                     }
                  }
               }
            }
         }       
//+---------------------------------------------------------------------------+
//|                       ***** Zamknięcie sell *****                         |
//+---------------------------------------------------------------------------+      
         for (i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_SELL){ 
                  if (OrderOpenPrice() <= iOpen("EURUSD", PERIOD_M5, iBarShift("EURUSD", PERIOD_M5, (OrderOpenTime() + 600)))){
                     if(TimeCurrent()-OrderOpenTime()>=900){
                        if(O_1>O0&&O0<O1){
                           OrderClose(OrderTicket(),OrderLots(),Ask,0,LimeGreen);
                        }
                     }
                  }
               }
            }
         } 

         for (i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_SELL){ 
                  if (OrderOpenPrice() > iOpen("EURUSD", PERIOD_M5, iBarShift("EURUSD", PERIOD_M5, (OrderOpenTime() + 600)))){
                     if(TimeCurrent()-OrderOpenTime()>=600){
                        if(OrderOpenPrice()==Ask){
                           OrderClose(OrderTicket(),OrderLots(),Ask,0,LimeGreen);
                        }
                     }
                  }
               }
            }
         } 
Niestety powyższy kod nie wykonuje wcześniej wymienionych założeń. Niestety nie mogę znaleźć błędu w kodzie. Mógłby ktoś pomóc?
Pozdrawiam

ODPOWIEDZ