EA otwierający dwie przeciwstawne pozycje o X godzinie

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
szahal
Stały bywalec
Stały bywalec
Posty: 35
Rejestracja: 14 cze 2010, 07:51

EA otwierający dwie przeciwstawne pozycje o X godzinie

Nieprzeczytany post autor: szahal »

Witam,
Jak w temacie, poszukuję EA otwierającego dwie przeciwstawne pozycje o określonej godzinie, z określonymi SL, TP, TS. Zna ktoś takie? Z góry dzięki za informacje.
Obrazek

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Wystarczy Ea które otwiera o określonej godzinie transakcje i uruchomisz je 2 razy.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Awatar użytkownika
szahal
Stały bywalec
Stały bywalec
Posty: 35
Rejestracja: 14 cze 2010, 07:51

Nieprzeczytany post autor: szahal »

W sumie to rozwiązanie też jest OK. Jednak nadal potrzebuję takiego EA.
Obrazek

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

Nieprzeczytany post autor: Fesiek »

Ja jestem cienki bolek w programowaniu ale widzę, że tu nikt nie odpowiada, więc napisałem takie coś. Problem w tym, że nie wiem jak zrobić by nie otwierał pozycji co tick o zadanej minucie i na testerze otwiera tylko Longi.
Jeśli znajdzie się jakaś dobra duszyczka to niech poprawi kod tak by EA otwierało jednego Shorta i jednego Longa. Z założenia ma to robić minutę przed publikacją ważnych danych.

Aha. SL i TP jest ustawione dla broka, który kwotuje 5 miejsc po przecinku.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                 minuta przed.mq4 |
//|                                                           Fesiek |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Fesiek"
#property link      "http://www.Fesiek.pl"//:) oczywiście nie ma takiej strony :)

//--- input parameters
extern int       Godzina=13;
extern int       Minuta=29;
extern int       StopLoss=1600;
extern int       TakeProfit=60;
extern double    Lots   = 0.1;

int      Długa=0;
int      Krótka=0;


int start()
{
  if ( Hour()==Godzina && Minute()==Minuta)
     {
       OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"My order BUY",16384,0,Green);
       OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
     }
     
 return(0);
}

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

nie

Kod: Zaznacz cały

OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
tylko

Kod: Zaznacz cały

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
pzdr Andrzej
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
szahal
Stały bywalec
Stały bywalec
Posty: 35
Rejestracja: 14 cze 2010, 07:51

Nieprzeczytany post autor: szahal »

Faktycznie, trochę tych pozycji otwiera :) przydałoby się też TS.
Obrazek

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

Nieprzeczytany post autor: Fesiek »

Teraz otwiera jednego Longa i jednego Shorta o godzinie 13:30 czasu Admiral Markets. Godzinę oczywiście można modyfikować by EA złożyło zlecenia o godzinie jakiej chcemy, zależnie od tego, o której wypadają dane makro.
W tralig stopa się nie baiwę. Zajmie mi to za dużo czasu gdyż nie jestem biegły w programowaniu i w zasadzie bazuję na innych kodach a zmian dokonuję metodą prób i błędów.
Proszę pamiętać by ustawić SL i TP zależnie od tego jakie kwotowanie ma broker. Jeden pip to czwarte miejsce po przecinku.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                 minuta przed.mq4 |
//|                                                           Fesiek |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Fesiek"
#property link      "http://www.Fesiek.pl"//:) oczywiście nie ma takiej strony :)

//--- input parameters
extern int       Godzina=13;
extern int       Minuta=29;
extern int       StopLoss=20;
extern int       TakeProfit=10;
extern double    Lots   = 0.1;

int      Długa=0;
int      Krótka=0;


int start()
{
  if ( Hour()==Godzina && Minute()==Minuta)
   { 
    
    if(OrdersTotal()<2)
    
    
     {
       
       OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"My order BUY",16384,0,Green);
       
       if(OrderType()==OP_BUY)
       OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
     }
    } 
 return(0);
}

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

Fesiek proponowal bym zmineic kod na taki bardziej funkcjonalny .... poniewaz kozystaj z powyzszego kodu moze zdazyc sie tak ze otworzy Ci dwa zlecenia buy ;)

mniej wiecej moglo by wygladac to tak :

nadszedl tick
zlecen jest mniej niz 2
wysyla zlecenie buy - udalo sie
wysyla zlecenie sell - dostal requote
nadszedl kolejny tick
zlecen jest mniej niz 2
wysyla zlecenie buy - udalo sie
wysyla zlecenie sell - udalo sie

;)

zamiast

Kod: Zaznacz cały

if(OrdersTotal()<2)
uzyl bym funkcji do sprawdzania ilosci zlecen ...
pzdr Andrzej

Dodano po 13 minutach:

PS prosze nie odbierac moich postow jako krytyke czy temu podobne ..... to jest pomoc ;)
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
RafalT
Stały bywalec
Stały bywalec
Posty: 77
Rejestracja: 25 wrz 2010, 00:24

Nieprzeczytany post autor: RafalT »

Do kontroli ilości zleceń funkcja:

Kod: Zaznacz cały

  
int countOrders() {
int count=0;
for(int i=0;i<OrdersTotal();i++) 
               {
               if(OrderSelect(i,SELECT_BY_POS)) 
               {              
                 if(OrderSymbol()==Symbol()) 
                 {
                  count++;
               } } }   
              return(count);
   }
   




Potem w warunku transakcji

if ( warunki && countOrders()<1)

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

raczej zalecil bym :

Kod: Zaznacz cały

int countOrders(int cmd) {
int count=0;
for(int i=0;i<OrdersTotal();i++)
               {
               if(OrderSelect(i,SELECT_BY_POS))
               {             
                 if(OrderSymbol()==Symbol() && cmd==OrderType())
                 {
                  count++;
               } } }   
              return(count);
   } 
a cale ea to moglo by wygladac tak :

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                 minuta przed.mq4 |
//|                                                           Fesiek |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Fesiek"
#property link      "http://www.Fesiek.pl"//:) oczywiście nie ma takiej strony :)

//--- input parameters
extern int       Godzina=13;
extern int       Minuta=29;
extern int       StopLoss=20;
extern int       TakeProfit=10;
extern double    Lots   = 0.1;

int      Długa=0;
int      Krótka=0;


int start()
{
  if ( Hour()==Godzina && Minute()==Minuta)
   {
   
       
    if (countOrders(OP_BUY)==0)   OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Bid+TakeProfit*Point,"My order BUY",16384,0,Green);
       
   if (countOrders(OP_SELL)==0)    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
     }
    }
 return(0);
}
int countOrders(int cmd) {
int count=0;
for(int i=0;i<OrdersTotal();i++)
               {
               if(OrderSelect(i,SELECT_BY_POS))
               {             
                 if(OrderSymbol()==Symbol() && cmd==OrderType())
                 {
                  count++;
               } } }   
              return(count);
   } 
pozdrawiam Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ