ich habe mir einen EA erstellt, der von einem Indikator erstellte Linien mit einbindet. Um die Preislevels der Objekte zubekommen, loope ich mit einer for-schleife durch die Objekte und lasse mir die Preise wieder geben. Komischerweise werde Objektpreise ausgegeben, die es laut Chart gar nicht an den Stellen gibt! Deswegen werden Orders geöffnet an Stellen die ich nicht nachvollziehen kann.
Die pinken/lilanen Linien sind die Res/Sup Linien.
Ich bin über jede Hilfe dankbar.
PHP-Code:
extern int magicnumber = 111;
extern double lotsize = 0.1;
extern int ATR_multiplier = 3;
extern int starttime = 6;
extern int endtime = 20;
datetime timestamp = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---_Indicator_Call-----
int ATR_timeframe = 0;
int ATR_periode = 10;
double ATR_value = iATR(NULL,ATR_timeframe,ATR_periode,1);
int CCI_timeframe = 0;
int CCI_periode = 14;
double CCI_value = iCCI(NULL,CCI_timeframe,CCI_periode,PRICE_CLOSE,1);
//---Stoploss-----
double stopplossshort = Close[1] + ATR_value * ATR_multiplier;
double stopplosslong = Close[1] - ATR_value * ATR_multiplier;
//---TakeProfit-----
double takeprofitshort = 0;
double takeprofitlong = 0;
//---Check_for_objects-----
if(ObjectsTotal(0,0,OBJ_TREND) == 0)
{Alert("No objects available");}
//---Variable_definition-----
double object_price;
string object_name;
//---OrderSend-----
for(int i = 0; i <= ObjectsTotal(0,0,OBJ_TREND) - 1; i++)
{
object_name = ObjectName(i);
object_price = ObjectGetDouble(0,object_name,OBJPROP_PRICE1);
//---Sell_Order-----
if((High[1] - object_price) > (Point/2) && //High[1] > object_price
(object_price - Close[1]) > (Point/2) && //Close[1]< object_price
check_price_in_MA() == true &&
CCI_value >= 100 &&
trading_hour() == true &&
check_newbar() == true &&
Volume[0] == 1)
{
Alert("Close = ",Close[1]," objectprice = ",object_price," High = ", High[1]);
if(!OrderSend(Symbol(),OP_SELL,lotsize,Bid,5,stopplossshort,takeprofitshort,"",magicnumber,0,Red))
{
Alert("failed to send Sell order = ",GetLastError());
}
}
//---Buy_Order-----
if((object_price - Low[1]) > (Point/2) && // object_price > Low[1]
(Close[1] - object_price) > (Point/2) && // Close[1] >= object_price
check_price_in_MA() == true &&
CCI_value <= -100 &&
trading_hour() == true &&
check_newbar() == true &&
Volume[0] == 1)
{
Alert("Close = ",Close[1]," objectprice = ",object_price," Low = ", Low[1]);
if(!OrderSend(Symbol(),OP_BUY,lotsize,Ask,5,stopplosslong,takeprofitlong,"",magicnumber,0,Blue))
{
Alert("failed to send Sell order = ",GetLastError());
}
}
}
//---TSL-----
double trailingSLrange = Close[1] + ATR_value *ATR_multiplier - Close[1];
for(int i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
//---Check_trailing_SL_short--
if(OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && (((OrderStopLoss() - Bid) - trailingSLrange) > Point/2))
{
double newstopploss_short = Bid + trailingSLrange;
if(!OrderModify(OrderTicket(),OrderOpenPrice(),newstopploss_short,0,0,Red))
{
Alert("Ordermodify short failed ",Symbol()," ", GetLastError());
}
}
//---Check_trailing_SL_long--
if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber && (((Ask - OrderStopLoss()) - trailingSLrange) > Point/2))
{
double newstopploss_long = Ask - trailingSLrange;
if(!OrderModify(OrderTicket(),OrderOpenPrice(),newstopploss_long,0,0,Blue))
{
Alert("Ordermodify short failed ",Symbol()," ", GetLastError());
}
}
}
//---Comment---
Comment( "MN = ",magicnumber,
"\nTradinghours = ",trading_hour(),
"\nObjectstotal = ",ObjectsTotal(0,0,OBJ_TREND),
"\nSpread = ",MarketInfo(Symbol(),MODE_SPREAD),
"\nATR_multiplier = ",ATR_multiplier);
}
//+------------------------------------------------------------------+
//---Check_Tradinghours---------------------------------------------------------------------
bool trading_hour()
{
if(starttime < TimeHour(TimeCurrent()) && TimeHour(TimeCurrent()) < endtime)
{
return (true);
}
else return(false);
}
//---Check_MA---------------------------------------------------------------------
bool check_price_in_MA()
{
//---MA_5min-----
int SMA200_5_timeframe = 5;
int SMA200_5_periode = 200;
double SMA200_5_value = iMA(NULL,SMA200_5_timeframe,SMA200_5_periode,0,MODE_SMA,PRICE_CLOSE,1);
int EMA100_5_timeframe = 5;
int EMA100_5_periode = 100;
double EMA100_5_value = iMA(NULL,EMA100_5_timeframe,EMA100_5_periode,0,MODE_EMA,PRICE_CLOSE,1);
int EMA50_5_timeframe = 5;
int EMA50_5_periode = 50;
double EMA50_5_value = iMA(NULL,EMA50_5_timeframe,EMA50_5_periode,0,MODE_EMA,PRICE_CLOSE,1);
//---MA 15min-----
int SMA200_15_timeframe = 15;
int SMA200_15_periode = 200;
double SMA200_15_value = iMA(NULL,SMA200_15_timeframe,SMA200_15_periode,0,MODE_SMA,PRICE_CLOSE,1);
int EMA100_15_timeframe = 15;
int EMA100_15_periode = 100;
double EMA100_15_value = iMA(NULL,EMA100_15_timeframe,EMA100_15_periode,0,MODE_EMA,PRICE_CLOSE,1);
int EMA50_15_timeframe = 15;
int EMA50_15_periode = 50;
double EMA50_15_value = iMA(NULL,EMA50_15_timeframe,EMA50_15_periode,0,MODE_EMA,PRICE_CLOSE,1);
//---MA_60min-----
int SMA200_60_timeframe = 60;
int SMA200_60_periode = 200;
double SMA200_60_value = iMA(NULL,SMA200_60_timeframe,SMA200_60_periode,0,MODE_SMA,PRICE_CLOSE,1);
int EMA100_60_timeframe = 60;
int EMA100_60_periode = 100;
double EMA100_60_value = iMA(NULL,EMA100_60_timeframe,EMA100_60_periode,0,MODE_EMA,PRICE_CLOSE,1);
int EMA50_60_timeframe = 60;
int EMA50_60_periode = 50;
double EMA50_60_value = iMA(NULL,EMA50_60_timeframe,EMA50_60_periode,0,MODE_EMA,PRICE_CLOSE,1);
if((High[1] >= SMA200_5_value && Low[1] <= SMA200_5_value )||
(High[1] >= SMA200_15_value && Low[1] <= SMA200_15_value)||
(High[1] >= SMA200_60_value && Low[1] <= SMA200_60_value)||
(High[1] >= EMA100_5_value && Low[1] <= EMA100_5_value )||
(High[1] >= EMA100_15_value && Low[1] <= EMA100_15_value)||
(High[1] >= EMA100_60_value && Low[1] <= EMA100_60_value)||
(High[1] >= EMA50_5_value && Low[1] <= EMA50_5_value )||
(High[1] >= EMA50_15_value && Low[1] <= EMA50_15_value )||
(High[1] >= EMA50_60_value && Low[1] <= EMA50_60_value ))
{
return (true);
}
else return(false);
}
//---Check_Tradinghours---------------------------------------------------------------------
bool check_newbar()
{
datetime current_bartime = iTime(Symbol(),PERIOD_M5,0);
if(current_bartime != timestamp)
{
timestamp = current_bartime;
return (true);
}
else return (false);
}