Witam
mam dwa posciutkie ea, jedno ustawia stop loss itd a drugie robi zrzut danych do pliku, czy mozna napisac takie ea naglowkowe zeby z niego wywolywac dwa pozostale
pozdrawiam
czy mozna polaczy rozne ea ?
1. Musisz mieć kod EA.sonixh pisze:Chciałbym zmieniać ten kierunek w zależności od koloru (indyka) MA Colored ale nie wiem jak w prosty sposób to połączyć. Jest jakaś prosta metoda bez gruntownej przebudowy EA?
2. Musisz dodać do warunków otwarcia sprawdzanie jaki jest MA obecnie i na poprzedniej świecy (na tej podstawie MA otrzymuje odpowiedni kolor).
Czy to prosto czy nie to już każdy sobie indywidualnie odpowie.
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Hmm, mam kod EA. Tam jest coś takiego:
extern int
MagicNumber = 666,
Slippage = 3;
extern bool
Use_MA_Logic = true;
extern int
MA1_Slow = 55,
MA2_Fast = 8,
TrailingStop = 5;
extern bool
Use_RSI_Filter = false;
extern int
RSI_Period = 7,
RSI_High = 70,
RSI_Low = 30;
extern bool
Open_Buy = true,
Open_Sell = true,
TradeAgainAfterProfit = true;
extern int
LevelDistance = 1,
StopLoss = 65;
extern double
MoneyTakeProfit = 10000;
extern double
Lots_Level_1 = 0.1,
Lots_Level_2 = 0.1,
Lots_Level_3 = 0.2,
Lots_Level_4 = 0.3,
Lots_Level_5 = 0.5,
Lots_Level_6 = 0.8,
Lots_Level_7 = 1.3,
Lots_Level_8 = 2.1,
Lots_Level_9 = 3.4,
Lots_Level_10 = 5.5,
Lots_Level_11 = 8.9,
Lots_Level_12 = 14.4,
Lots_Level_13 = 23.3,
Lots_Level_14 = 37.7;
bool Trade=True;
datetime FirstTime,TT;
double BestBuySL, BestSellSL;
int ticket1,ticket2,ticket3,ticket4,ticket5,ticket6,ticket7,ticket8,ticket9,ticket10,ticket11,ticket12,ticket13,ticket14;
int MyDigits;
double MyPoint;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits==5)MyDigits=4;
else if(Digits==3)MyDigits=2;
else MyDigits = Digits;
if (Point == 0.00001) MyPoint = 0.0001; //6 digits
else if (Point == 0.001) MyPoint = 0.01; //3 digits (for Yen based pairs)
else MyPoint = Point; //Normal
FirstTime = 0;
Print("Adjusted for 4/5 digit pip differences");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(TradeAgainAfterProfit)Trade=true;
ticket1 = 0;
ticket2 = 0;
ticket3 = 0;
ticket4 = 0;
ticket5 = 0;
ticket6 = 0;
ticket7 = 0;
ticket8 = 0;
ticket9 = 0;
ticket10 = 0;
ticket11 = 0;
ticket12 = 0;
ticket13 = 0;
ticket14 = 0;
if(Use_MA_Logic)
{
Open_Buy = true;
Open_Sell = true;
double MA_Slow = iMA(Symbol(),0,MA1_Slow,0,0,0,1);
double MA_Fast = iMA(Symbol(),0,MA2_Fast,0,0,0,1);
double MA_Slow_L = iMA(Symbol(),0,MA1_Slow,0,0,0,2);
double MA_Fast_L = iMA(Symbol(),0,MA2_Fast,0,0,0,2);
// ------
if(MA_Slow-MA_Fast>0&&MA_Slow_L<MA_Fast_L&&TT!=iTime(Symbol(),0,0))
{
Open_Buy = false;
Open_Sell = true;
}
// -----------
if(MA_Slow-MA_Fast<-0&&MA_Slow_L>MA_Fast_L&&TT!=iTime(Symbol(),0,0))
{
Open_Buy = true;
Open_Sell = false;
}
W chwili gdy zaczynam kombinować z wprowadzeniem nowych rzeczy kompilator chce mnie zabić. Ja poprostu potrzebuję pomocy. Muszę to koniecznie zrozumieć bo EA robi zbyt duże straty w chwili zmiany trendu. A jak już zrobi dobra transakcję to powinien kontynuować robotę. A nie chce...
Możesz mi pomóc?
Dodano po 2 godzinach 9 minutach:
Ze wskazaniem trendu już jest łatwiej bo ktoś to wcześniej przerobił:
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_width1 1
#property indicator_color2 Green
#property indicator_width2 1
#property indicator_color3 Red
#property indicator_width3 1
extern int xPeriod=12;
extern double xSlope = 4.0;
double HMA[],up[],dn[],kierunek; //dodalem zmienna kierunek
int init() {
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,HMA);
SetIndexLabel(0,"HMA " + xPeriod + " , " + xSlope) ;
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,up);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,dn);
SetIndexBuffer(3,kierunek); // ten bufor jest dopisany przeze mnie, abym mogl pobierac z niego wartosci o kier. trendu- hma=0, up=1, down=2,
return(0);
}
int deinit() {return(0); }
int start() {
double sqrt = MathRound ( MathSqrt( xPeriod ) );
for(int i=Bars;i>=0;i--) {
double sum = 0;
int wma_sum = 0;
for(int j=0; j < sqrt; j++) {
double val = 2*iMA(NULL, 0, MathRound(xPeriod/2), 0, MODE_LWMA, PRICE_MEDIAN, i+j)- iMA(NULL, 0, xPeriod, 0, MODE_LWMA, PRICE_MEDIAN, i+j);
sum = sum + val*(sqrt-j);
wma_sum = wma_sum + (sqrt-j);
}
HMA = sum/wma_sum;
if(HMA>HMA[i+1]+xSlope*Point) {up=HMA;kierunek=1;} //przypisalem do zm. kierunek wart 1 czyli ze jest trend wzrostowy
if(HMA<HMA[i+1]-xSlope*Point) {dn=HMA;kierunek=2;} //przypisalem do zm. kierunek wart 2 czyli ze jest trend spadkowy
// niestety nie wiem gdzie przypisac wartosc kierunek=0 dla slabego trendu (żółty kolor na wskazniku)
// Po tych modyfikacjach bufor3 ze zmmienna kierunek i tak nie zwraca prawidlowych wartości (0,1,2) tylko jakąś 10 cyfrową liczbę
}
return(0);
}
extern int
MagicNumber = 666,
Slippage = 3;
extern bool
Use_MA_Logic = true;
extern int
MA1_Slow = 55,
MA2_Fast = 8,
TrailingStop = 5;
extern bool
Use_RSI_Filter = false;
extern int
RSI_Period = 7,
RSI_High = 70,
RSI_Low = 30;
extern bool
Open_Buy = true,
Open_Sell = true,
TradeAgainAfterProfit = true;
extern int
LevelDistance = 1,
StopLoss = 65;
extern double
MoneyTakeProfit = 10000;
extern double
Lots_Level_1 = 0.1,
Lots_Level_2 = 0.1,
Lots_Level_3 = 0.2,
Lots_Level_4 = 0.3,
Lots_Level_5 = 0.5,
Lots_Level_6 = 0.8,
Lots_Level_7 = 1.3,
Lots_Level_8 = 2.1,
Lots_Level_9 = 3.4,
Lots_Level_10 = 5.5,
Lots_Level_11 = 8.9,
Lots_Level_12 = 14.4,
Lots_Level_13 = 23.3,
Lots_Level_14 = 37.7;
bool Trade=True;
datetime FirstTime,TT;
double BestBuySL, BestSellSL;
int ticket1,ticket2,ticket3,ticket4,ticket5,ticket6,ticket7,ticket8,ticket9,ticket10,ticket11,ticket12,ticket13,ticket14;
int MyDigits;
double MyPoint;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits==5)MyDigits=4;
else if(Digits==3)MyDigits=2;
else MyDigits = Digits;
if (Point == 0.00001) MyPoint = 0.0001; //6 digits
else if (Point == 0.001) MyPoint = 0.01; //3 digits (for Yen based pairs)
else MyPoint = Point; //Normal
FirstTime = 0;
Print("Adjusted for 4/5 digit pip differences");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(TradeAgainAfterProfit)Trade=true;
ticket1 = 0;
ticket2 = 0;
ticket3 = 0;
ticket4 = 0;
ticket5 = 0;
ticket6 = 0;
ticket7 = 0;
ticket8 = 0;
ticket9 = 0;
ticket10 = 0;
ticket11 = 0;
ticket12 = 0;
ticket13 = 0;
ticket14 = 0;
if(Use_MA_Logic)
{
Open_Buy = true;
Open_Sell = true;
double MA_Slow = iMA(Symbol(),0,MA1_Slow,0,0,0,1);
double MA_Fast = iMA(Symbol(),0,MA2_Fast,0,0,0,1);
double MA_Slow_L = iMA(Symbol(),0,MA1_Slow,0,0,0,2);
double MA_Fast_L = iMA(Symbol(),0,MA2_Fast,0,0,0,2);
// ------
if(MA_Slow-MA_Fast>0&&MA_Slow_L<MA_Fast_L&&TT!=iTime(Symbol(),0,0))
{
Open_Buy = false;
Open_Sell = true;
}
// -----------
if(MA_Slow-MA_Fast<-0&&MA_Slow_L>MA_Fast_L&&TT!=iTime(Symbol(),0,0))
{
Open_Buy = true;
Open_Sell = false;
}
W chwili gdy zaczynam kombinować z wprowadzeniem nowych rzeczy kompilator chce mnie zabić. Ja poprostu potrzebuję pomocy. Muszę to koniecznie zrozumieć bo EA robi zbyt duże straty w chwili zmiany trendu. A jak już zrobi dobra transakcję to powinien kontynuować robotę. A nie chce...
Możesz mi pomóc?
Dodano po 2 godzinach 9 minutach:
Ze wskazaniem trendu już jest łatwiej bo ktoś to wcześniej przerobił:
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Yellow
#property indicator_width1 1
#property indicator_color2 Green
#property indicator_width2 1
#property indicator_color3 Red
#property indicator_width3 1
extern int xPeriod=12;
extern double xSlope = 4.0;
double HMA[],up[],dn[],kierunek; //dodalem zmienna kierunek
int init() {
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,HMA);
SetIndexLabel(0,"HMA " + xPeriod + " , " + xSlope) ;
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,up);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,dn);
SetIndexBuffer(3,kierunek); // ten bufor jest dopisany przeze mnie, abym mogl pobierac z niego wartosci o kier. trendu- hma=0, up=1, down=2,
return(0);
}
int deinit() {return(0); }
int start() {
double sqrt = MathRound ( MathSqrt( xPeriod ) );
for(int i=Bars;i>=0;i--) {
double sum = 0;
int wma_sum = 0;
for(int j=0; j < sqrt; j++) {
double val = 2*iMA(NULL, 0, MathRound(xPeriod/2), 0, MODE_LWMA, PRICE_MEDIAN, i+j)- iMA(NULL, 0, xPeriod, 0, MODE_LWMA, PRICE_MEDIAN, i+j);
sum = sum + val*(sqrt-j);
wma_sum = wma_sum + (sqrt-j);
}
HMA = sum/wma_sum;
if(HMA>HMA[i+1]+xSlope*Point) {up=HMA;kierunek=1;} //przypisalem do zm. kierunek wart 1 czyli ze jest trend wzrostowy
if(HMA<HMA[i+1]-xSlope*Point) {dn=HMA;kierunek=2;} //przypisalem do zm. kierunek wart 2 czyli ze jest trend spadkowy
// niestety nie wiem gdzie przypisac wartosc kierunek=0 dla slabego trendu (żółty kolor na wskazniku)
// Po tych modyfikacjach bufor3 ze zmmienna kierunek i tak nie zwraca prawidlowych wartości (0,1,2) tylko jakąś 10 cyfrową liczbę

}
return(0);
}