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
EA na bazie wskaźnika TRO
EA na bazie wskaźnika TRO
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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.
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);
}
}
}
}
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.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
ech...