EA na bazie wskaźnika TRO

O jezykach programowania w platformach i nie tylko.
Laster
Bywalec
Bywalec
Posty: 11
Rejestracja: 25 lip 2010, 21:42

EA na bazie wskaźnika TRO

Nieprzeczytany post autor: Laster »

Witam
Chciał bym zrobić EA na podstawie wskaźnika z załącznika.
Wskaźnik co godzinę wyznacza linie z otwarcia świecy oraz cztery równoległe linie w odległości 5 i 11 pipsa od linii którą wyznaczyła świeca otwarcia.
Próbowałem na tej stronie http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ ale EA jest chyba za bardzo skomplikowane.
Opisze może dokładnie o co mi chodzi EA ma:
1. Wyznaczać co godzinę poziom otwarcia świecy
2. Na podstawie otwarcia jeżeli cena pójdzie do góry lub na dół w odległości 5 pipsów od niej otworzyć zlecenie.
3. Ustawić TP na poziomie 11 pipsów od poziomu otwarcia świecy oraz SL na poziomie otwarcia świecy.
FT 1m
Dodam jeszcze tylko że system jest dość dochodowy testowałem go na demie ok 2 miesiące tylko czasami ciężko zdążyć z otwarciem zlecania ale jak by to zautomatyzować to ho ho :lol:
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
Kielki
Gaduła
Gaduła
Posty: 201
Rejestracja: 04 maja 2009, 10:11

Nieprzeczytany post autor: Kielki »

Bylo chyba podobne ea pisane w temacie o buyzone :)
"What separates the winners from the losers, is the winners have learned how to lose"

Laster
Bywalec
Bywalec
Posty: 11
Rejestracja: 25 lip 2010, 21:42

Nieprzeczytany post autor: Laster »

Faktycznie ktoś już to przerabiał dzięki za pomoc

Dodano po 21 godzinach 44 minutach:

Czy ktoś może mi zmienić te EA tak żeby działało tak jak napisałem w poście na górze.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                      Buyzone.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
// gdy zamknij=0 to owiera nowe zlecenie dopiero gdy poprzednie złapie TP lub SL
// zamiast zlecen oczekujących zlecenia bezpośrednie
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern int Hstart=16; // godzina rozpoczęcia handlu
extern int Mstart=0; // minuta rozpoczęcia handlu
extern int Hstop=16; // godzina zakonczenia handlu czyli EA po tej godzinie nie ustawia nowych zleceń ale obsługuje bieżace
extern int Mstop=20; // minuta zakonczenia handlu
extern int entry=6;
extern int TP=30;
extern int SL=10;
extern int slippage=2;
extern int BreakEven=0;    //  jeśli 0 BE wyłączony, jesli inna wartość tzn. żę po tylu zarobionych pisach przesun SL na poziom otwarcia 
extern int TrailingStop=0; // jeśli 0 TS wyłączony, jaki SL przy trailignu
extern int TrailingStep=0; // co ile pisów przesuwac SL
extern int TrailingActive=0; // ile pipsów zysku żeby uaktywnic TS
extern double mnoznikTS=1;
extern int zamykaj=1; // 0 nie zamykaj czeka na SL lub TP, 1 zamykaj po godzinie, 2 nie ustawiaj TP tylko zamykaj po godzine
extern bool onlytrend=false;
//bool logi=true;
extern double min_lot=0.1; // minimalna wielkość lota
extern double mnoznikLOT=1; // mnożnik
extern int licz_profit=5; // do której transakcji zyskownej podrząd mnożyć wielkość lota
double spread;
int tiket;
datetime Htiket; // czas ustawienia zlecenia
int Ntiket; // liczba zyskownych transkacji pod rząd
int result; //
double lot;
double tmp;
double  mnozTrailingStop; // przemnożony trailingstop
bool aktywnyTS; // tzn czy trailig się uaktywnił
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  
  spread =MarketInfo(Symbol(), MODE_SPREAD);
  lot=min_lot;
  tmp=Time[0];// zapamiętuje czas świecy aby zaczyać dopiero od nas następnej świecy    
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {


if ((Time[0]+Period()*60-60<=TimeCurrent()) && (tiket>0)) ///zamyka w ostatniej minucie swiecy
{

  //  zamyka zlecenia z poprzedniej godziny
     
     
           if (zamykaj!=0)
            {  OrderSelect(tiket,SELECT_BY_TICKET);         
               if (OrderType()==OP_BUY)                             
               result=OrderClose(tiket,lot,Bid,slippage,CLR_NONE); 
               else
               result=OrderClose(tiket,lot,Ask,slippage,CLR_NONE); 
            }             
    
}

if ((TimeCurrent()>=StrToTime(Hstart+":"+Mstart)) && (TimeCurrent()<=StrToTime(Hstop+":"+Mstop)) && (tiket<1) && (tmp!=Time[0]))
   // tzn, że zaczęła się nowa świeca tymczasowe rozwiązanie do testów
 {
  if ( Bid>=Open[0] +entry * Point) /// czyli poszło w góre
  //if ( Ask>=Open[0] +(entry + spread)*Point) /// czyli poszło w góre
   {
     if ((onlytrend==false) || (Open[1]<Close[1]))
      {
      if ((zamykaj==2) || (TP==0)) // ustaw zlecenie bez TP
       { tiket= OrderSend(Symbol(), OP_BUY, lot, Ask  , slippage, Ask - SL*Point, 0, "BZone1.14", 1024, 0, CLR_NONE );    }
      else
       { tiket= OrderSend(Symbol(), OP_BUY, lot, Ask  , slippage, Ask - SL*Point, Ask + TP*Point, "BZone1.14", 1024, 0, CLR_NONE );     }
         if (tiket<1)   
          { int error=GetLastError();
           Comment(ErrorDescription(error));
      //   if (logi==true) { FileWrite(uchwyt,TimeHour(TimeCurrent())+":"+TimeMinute(TimeCurrent())+":"+TimeSeconds(TimeCurrent())+" "+ErrorDescription(error));
          }
          else
          {
          Htiket=TimeCurrent(); // zapisuje czas ustawienia zleceń           
          aktywnyTS=false;
          mnozTrailingStop=TrailingStop;
          }                  
       }      
    }
   
  if ( Bid<=Open[0] -entry*Point) /// czyli poszło w doł
   {
     if ((onlytrend==false) || (Open[1]>Close[1]))
      {
      if ((zamykaj==2) || (TP==0))  // ustaw zlecenie bez TP
       {tiket= OrderSend(Symbol(), OP_SELL, lot,Bid , slippage, Bid+SL*Point, 0, "BZone1.14", 1024, 0, CLR_NONE );    }
      else
       {tiket= OrderSend(Symbol(), OP_SELL, lot, Bid  , slippage, Bid+SL*Point ,Bid-TP*Point ,"BZone1.14", 1024, 0, CLR_NONE );    }
         if (tiket<1)   
          { int error1=GetLastError();
            Comment(ErrorDescription(error1));      
          } 
          else
          {
          Htiket=TimeCurrent(); // zapisuje czas ustawienia zleceń  
          aktywnyTS=false;
          mnozTrailingStop=TrailingStop;         
          }                 
   
      }
    }
   
 }  
else
{
  if (tiket>0)
  { OrderSelect(tiket,SELECT_BY_TICKET);         
    if (OrderCloseTime()!=0)           // sprawdz czy jest zrealizowane
       { tiket=0;                 
          tmp=Time[0]; // tymczasowe rozwiązanie tylko do testów / zapamiętuje na której świecy złapał SL lub TP                  
             if (OrderProfit()>0) // jesli zysk
               { Ntiket++;
                  if (Ntiket<=licz_profit) 
                  { if (MarketInfo(Symbol(),MODE_LOTSTEP)==0.01)
                     lot=NormalizeDouble(lot*mnoznikLOT,2);                 
                    else
                    lot=NormalizeDouble(lot*mnoznikLOT,1);               
                  }
                }
                else // czyli strata
                {Ntiket=0;
                 lot=min_lot;
                }
           
              }         
              else // czyli weszło ale nie jest zrealizowane
             {
               if (TrailingStop!=0) trailing(); // uawtywnia trailing stopa i obsługuje go
                
               if (BreakEven!=0)    // tzn że trzeba ustawić przesunąc Sl na poziom wejscia
                {
                 if ((OrderType()==OP_BUY) && (OrderOpenPrice()>OrderStopLoss())) 
                 {
                    if (Bid-OrderOpenPrice()>=BreakEven*Point) // zysk jest większy od breakeven                  
                    OrderModify(tiket,0,OrderOpenPrice(),OrderTakeProfit(),0,0);                                  
                 }   
                 if ((OrderType()==OP_SELL) && (OrderOpenPrice()<OrderStopLoss())) 
                 {
                     if (OrderOpenPrice()-Ask>=BreakEven*Point) // zysk jest większy od breakeven
                     OrderModify(tiket,0,OrderOpenPrice(),OrderTakeProfit(),0,0);                   
                  
                 } 
                } 
             } 
      } 
       

 
   }

            return(0);
 
  }
//+------------------------------------------------------------------+
int trailing()
{ OrderSelect(tiket,SELECT_BY_TICKET);         
 if (aktywnyTS==false) // tzn że TS jeszcze się nie uaktywnił i trzeba go teraz ustawić
  {  if (OrderType()==OP_BUY) // zlecenie kupna                    
     { if (Bid-OrderOpenPrice()>=TrailingActive*Point) /// jesli zysk większy lun równy od tralActiv
       { OrderModify(tiket,0,Bid-mnozTrailingStop*Point,OrderTakeProfit(),0,0); 
         aktywnyTS=true;
       } 
     }
     else
     {  if (OrderOpenPrice()-Ask>=TrailingActive*Point) /// jesli zysk większy lun równy od tralActiv
       { OrderModify(tiket,0,Ask+mnozTrailingStop*Point,OrderTakeProfit(),0,0); 
         aktywnyTS=true;
       } 
     }
  }
  else
  { if (OrderType()==OP_BUY) // zlecenie kupna                    
     { if (Bid-OrderStopLoss()>=(mnozTrailingStop+TrailingStep)*Point) // czyli kurs wzrosł o trailingstep i trzeba przesunąc SL
           { mnozTrailingStop=NormalizeDouble(mnozTrailingStop*mnoznikTS,0);
            if (MarketInfo(Symbol(), MODE_STOPLEVEL)>mnozTrailingStop) mnozTrailingStop=MarketInfo(Symbol(), MODE_STOPLEVEL);
             OrderModify(tiket,0,Bid-mnozTrailingStop*Point,OrderTakeProfit(),0,0); 
           }
     }
     else
     { if (OrderStopLoss()-Ask>=(mnozTrailingStop+TrailingStep)*Point) // czyli kurs spoadł o trailingstep i trzeba przesunąc SL
           { mnozTrailingStop=NormalizeDouble(mnozTrailingStop*mnoznikTS,0);
             if (MarketInfo(Symbol(), MODE_STOPLEVEL)>mnozTrailingStop) mnozTrailingStop=MarketInfo(Symbol(), MODE_STOPLEVEL);
             OrderModify(tiket,0,Ask+mnozTrailingStop*Point,OrderTakeProfit(),0,0); 
           }
     }
  }

}

Awatar użytkownika
Fesiek
Pasjonat
Pasjonat
Posty: 579
Rejestracja: 07 lis 2009, 15:32

Nieprzeczytany post autor: Fesiek »

Laster pisze:Dodam jeszcze tylko że system jest dość dochodowy testowałem go na demie ok 2 miesiące tylko czasami ciężko zdążyć z otwarciem zlecania ale jak by to zautomatyzować to ho ho Laughing
Jakoś tam skleciłem takie EA no i po kilku godzinach optymalizacji ze stopem i profitem doszedłem do wniosku, że jak grasz ręcznie to tak graj dalej, bo EA Ci wyzeruje konto.
ech...

ODPOWIEDZ