Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   OrderClose Problem + Wochentag Filter (http://www.expert-advisor.com/forum/showthread.php?t=6386)

statstrader 07.04.19 18:29

OrderClose Problem + Wochentag Filter
 
Liebe Forum Mitglieder,

ich bin dabei MQL4 zu lernen und schreibe gerade meinen ersten Expert Advisor. Nachdem ich keinen Programmier Background habe und mich mit Youtube, Google, MQL4 docs etc. ein wenig eingearbeitet habe, stehe ich nun vor folgendem Problem und bitte euch um Hilfe.

Trade Setup:
--------------
Eröffne Freitags eine Buy Order bei Market Open, wenn der Open der D1 Candle des Vortage und der Open des heutigen Tages über dem EMA (x) liegt und schließe die Order am Montag beim Open der D1 Candle.

Da ich diesen Expert Advisor verschieden einstellen möchte habe ich entsprechend einige inputs für die wichtigsten Werte definiert.

Fehler:
-------
Die Order wird laut Journal im Strategy Tester ohne Rücksicht auf den Weekday Filter sofort ausgeführt und wieder geschlossen.

Im Journal steht:

- unknown ticket #1 for order close function
- Order Close Error 4108

Bitte:
------
Ich wäre dankbar für jeden Input.

Der Code:
-----------

#property strict

int MagicNumber = 10000;

// Global external variables
//--------------------------


input int TradeOpenWeekday = 5; //TradeOpenDay of the week
input int TradeCloseWeekday = 1; // TradeCloseDay of the week
input int EMAperiod = 10; //EMA period
input double SL_ATR_Multi = 1.00; //SL_ATR_Multiplikator
input double TP_ATR_Multi = 3.00; //TP_ATR_Multiplikator
input double LotSize = 0.01; //Lotsize Traded
input int MaxSlippage = 10; //Maximum Slippage

//Global ínternal variables
//-------------------------
double BarOpen = iOpen(NULL,PERIOD_D1,0);
double BarClosePreviousCandle = iClose(NULL,PERIOD_D1,1);

double StopLossCalculation = NormalizeDouble((iATR(NULL,0,10,1)*SL_ATR_Multi),D igits);
double StopLossDistanceFromOpen = (BarOpen - StopLossCalculation);

double TakeProfitCalculation = NormalizeDouble((iATR(NULL,0,10,1)*TP_ATR_Multi),D igits);
double TakeProfitDistanceFromOpen = (BarOpen + TakeProfitCalculation);



// LONG - Trade Control Parameters + Ticket Numbers
// -----------------------------------------

bool LongTrade = false;
int BuyTicketNumber = OrderSend (Symbol(),OP_BUY,LotSize,Ask,MaxSlippage,StopLossD istanceFromOpen,TakeProfitDistanceFromOpen,"+++ GOLD_FR_EMA0_MO +++",MagicNumber,0,clrGreen);
bool BuyOrderSelected = OrderSelect(BuyTicketNumber,SELECT_BY_TICKET);
bool CloseLongTrade = OrderClose (BuyTicketNumber,LotSize,Bid,MaxSlippage,clrBlue);


// Trade Entry Indicators
// -----------------------
double EMA = NormalizeDouble ((iMA(NULL,0,EMAperiod,0,MODE_EMA,PRICE_CLOSE,1)), Digits);




//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{




return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{




}


//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()

{

//---------------------
//Check for Trade Setup
//---------------------

if ((BarClosePreviousCandle > EMA) && (BarOpen > EMA) && (DayOfWeek() == TradeOpenWeekday))

{
LongTrade = true;
}

else LongTrade = false;


//----------------
// Place Buy Order
//----------------

if (LongTrade == true)

{
BuyTicketNumber = OrderSend (_Symbol,OP_BUY,LotSize,Ask,MaxSlippage,StopLossDi stanceFromOpen,TakeProfitDistanceFromOpen,"+++ GOLD_FR_EMA0_MO +++",MagicNumber,0,clrGreen);
}

//-----------------
// Select Buy Order
//-----------------

if ((BuyTicketNumber >0) && (DayOfWeek() == TradeCloseWeekday))

{
BuyOrderSelected = true;
}

else BuyOrderSelected = false;

//----------------
// Close Buy Order
//----------------

if (BuyOrderSelected == true)

{
CloseLongTrade = true;
}


if (CloseLongTrade == true)

{

CloseLongTrade = OrderClose (BuyTicketNumber,LotSize,Bid,MaxSlippage,clrBlue);

}

}
//+------------------------------------------------------------------+


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:22 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum