Witam!
Od niedawna programuję i mam problem z moim robotem. Proszę o pomoc.
Pytanie 1: jaki napisać kod aby EA stawiał pojedyncze transakcje (do momentu zamknięcia pierwszej transakcji nie otwierał drugiej)?
Pytanie 2: jaki jest kod aby transakcja została zamknięta w momencie zmiany kierunku średniej kroczącej
Dorzucam robota, na razie wygląda tak:
//+------------------------------------------------------------------+
//| MA. mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "MA"
#property link "http://www.maniek.pl"//
//--- input parameters
extern int StopLoss=40;
extern int TakeProfit=80;
extern double Lots =0.1;
extern double DecreaseFactor=0;
extern double MovingPeriod=55;
extern double MovingShift=0;
int Krótka=0;
int start()
{
{
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
if(ma0<ma1)
{
OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
}
return(0);
}
Pojedyncza transakcja i zamknięcie z MA
Pojedyncza transakcja i zamknięcie z MA
Kilka moich spostrzeżeń na temat Forex http://forex-u-mariana.blogspot.com/
Re: Pojedyncza transakcja i zamknięcie z MA
Pomocna Ci będzie funkcja zliczająca liczbę otwartych transakcji. Np. :
Funkcję dodajesz na końcu kodu poza funkcją start().
I w warunku otwierania transakcji dodajesz
Wiadomo, że w warunku masz jeśli ilość buy =0, jak otworzy jedno buy to juz drugiego nie otworzy.
Pamiętaj, że zlecene BUY otwierasz po cenie Ask , a SELL po cenie Bid. Widzę, że teraz masz błąd.
Zmianę kierunku określasz porównując MA aktualne z MA poprzednim, więc poprzednia MA ma shift 1.
Czyli jeśli ma0>ma1 i dajesz OrderClose().
Pamiętaj również, że MA liczona po cenie Close zmienia swoją wartość do momentu zamknięcia świecy, czyli takich zmian kierunku możesz mieć 100 na minutę.
Kod: Zaznacz cały
int total(int cmd)
{int sum=0;
for(int i=0;i<=OrdersTotal();i++)
{OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&cmd==OrderType()&&OrderMagicNumber()==16384) sum++;
}return(sum);}
I w warunku otwierania transakcji dodajesz
Kod: Zaznacz cały
if(total(OP_BUY)==0&&......)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"My order BUY",16384,0,Green);
Pamiętaj, że zlecene BUY otwierasz po cenie Ask , a SELL po cenie Bid. Widzę, że teraz masz błąd.
Zmianę kierunku określasz porównując MA aktualne z MA poprzednim, więc poprzednia MA ma shift 1.
Czyli jeśli ma0>ma1 i dajesz OrderClose().
Pamiętaj również, że MA liczona po cenie Close zmienia swoją wartość do momentu zamknięcia świecy, czyli takich zmian kierunku możesz mieć 100 na minutę.
Solą życia jest kasa.
Re: Pojedyncza transakcja i zamknięcie z MA
ad 1.maniek16 pisze:Witam!
Od niedawna programuję i mam problem z moim robotem. Proszę o pomoc.
Pytanie 1: jaki napisać kod aby EA stawiał pojedyncze transakcje (do momentu zamknięcia pierwszej transakcji nie otwierał drugiej)?
Pytanie 2: jaki jest kod aby transakcja została zamknięta w momencie zmiany kierunku średniej kroczącej
jesli chcesz miec tylko 1 pozycje otwarta, to po prostu sprawdzasz wartosc jaka zwraca ci funkcja: OrdersTotal(), czyli
w swoim warunku otwarcia pozycji napisz:
Kod: Zaznacz cały
if(ma0<ma1 && OrdersTotal()<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
Co do drugiego warunku, to zdefiniuj najpierw slowami co rozumiesz przez:
"zmiane kierunku sredniej kroczacej"
- jesli oznacza to, ze (przyjmujac iz srednia kroczy w gore) wartosc sredniej na biezacej swiecy bedzie nizsza niz na swiecy poprzedniej, to mozesz napisac takie cos jak masz - ale to moze byc tylko chwilowa zmiana (pisal o tym tez Personov) w czasie 1 swiecy, a w sekunde pozniej juz mozesz miec ma0=ma1 lub nawet ma0>ma1.
Moze wiec warto dodac jeszcze jakis inny warunek sprawdzajacy.
No i nie zapomnij dorobic tez czesci otwierajacej pozycje dlugie....
Re: Pojedyncza transakcja i zamknięcie z MA
Tak, otwartą tylko jedną pozycję.
Kod poniżej działa, dzięki:)
//+------------------------------------------------------------------+
//| MA H1 .mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "MA H1"
#property link "http://www.maniek.pl"//
//--- input parameters
extern int StopLoss=40;
extern int TakeProfit=60;
extern double Lots =0.1;
extern double DecreaseFactor=0;
extern double MovingPeriod=55;
extern double MovingShift=0;
int Krótka=0;
int start()
{
{
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
if(ma0<ma1 && OrdersTotal()<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
}
return(0);
}
A zamykanie pozycji to chodzi mi zmianę kierunku już po zamknięciu świecy...?
Będę wdzięczny za taki "ruchomy take profit":)
Kod poniżej działa, dzięki:)
//+------------------------------------------------------------------+
//| MA H1 .mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "MA H1"
#property link "http://www.maniek.pl"//
//--- input parameters
extern int StopLoss=40;
extern int TakeProfit=60;
extern double Lots =0.1;
extern double DecreaseFactor=0;
extern double MovingPeriod=55;
extern double MovingShift=0;
int Krótka=0;
int start()
{
{
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
if(ma0<ma1 && OrdersTotal()<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
}
return(0);
}
A zamykanie pozycji to chodzi mi zmianę kierunku już po zamknięciu świecy...?
Będę wdzięczny za taki "ruchomy take profit":)
Kilka moich spostrzeżeń na temat Forex http://forex-u-mariana.blogspot.com/
Re: Pojedyncza transakcja i zamknięcie z MA
Jak chcesz po zamknięciu świecy to porównuj MA z shift 1 i MA z shift 2, a nie 0 i 1.
I zmień otwieranie tego sella na Bid, bo masz cały czas Ask ( czwarta wartość w nawiasie OrderSend ).
I zmień otwieranie tego sella na Bid, bo masz cały czas Ask ( czwarta wartość w nawiasie OrderSend ).
Solą życia jest kasa.
Re: Pojedyncza transakcja i zamknięcie z MA
Ale shift to wartość na końcu nawiasu?
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
Czy MovingShift?
extern double MovingShift=1;
i nie mam pojęcia jak wygląda OrderClose...? Szukam na forum i nie moge znaleźć..
-- Dodano: wt 02-10-2012, 19:29 --
//+------------------------------------------------------------------+
//| MA.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "MA"
#property link "http://www.maniek.pl"//
//--- input parameters
extern int StopLoss=40;
extern int TakeProfit=400;
extern double Lots =0.1;
extern double DecreaseFactor=0;
extern double MovingPeriod=55;
extern double MovingShift=0;
int Krótka=0;
int start()
{
{
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);
if(ma0<ma1 && OrdersTotal()<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
if(ma0>ma1)
{
OrderClose(Ask,Orange);
return(0);
}
}
return(0);
}
Co jeszcze dorzucić do nawiasu order close? proszę o pomoc.
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
Czy MovingShift?
extern double MovingShift=1;
i nie mam pojęcia jak wygląda OrderClose...? Szukam na forum i nie moge znaleźć..
-- Dodano: wt 02-10-2012, 19:29 --
//+------------------------------------------------------------------+
//| MA.mq4 |
//| Copyright 2012, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "MA"
#property link "http://www.maniek.pl"//
//--- input parameters
extern int StopLoss=40;
extern int TakeProfit=400;
extern double Lots =0.1;
extern double DecreaseFactor=0;
extern double MovingPeriod=55;
extern double MovingShift=0;
int Krótka=0;
int start()
{
{
double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);
if(ma0<ma1 && OrdersTotal()<1)
{
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Ask-TakeProfit*Point,"My order SELL",16384,0,Green);
}
if(ma0>ma1)
{
OrderClose(Ask,Orange);
return(0);
}
}
return(0);
}
Co jeszcze dorzucić do nawiasu order close? proszę o pomoc.
Kilka moich spostrzeżeń na temat Forex http://forex-u-mariana.blogspot.com/