Zitat:
Zitat von traderdoc
Code:
int ticket;
double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();
for(int i = hstTotal -1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
closedProfit = OrderProfit();
lastorder = OrderType();
break;
}
}
}
if (closedProfit>=0) {
//[...my conditions]
//[am ende der Loop]
}
if (closedProfit < 0) {
if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
}
}
}
Auf die Schnelle hingeschrieben, ohne zu testen.
traderdoc
|
Hallo, vielen Dank für deine schnelle Antwort. Ich soeben den von dir umgeänderten Code bei mir im EA eingefügt. Allerdings ist das Problem immernoch vorhanden. Der EA verkauft bzw. kauft leider immernoch nicht sobald ein Trade mit Verlust geschlossen wurde. Woran könnte das liegen?
Gruß Aron
Hier nochmal als Anhang der Teil meines EAs, wo die Bedingung drin stehen:
Code:
double mymagicnumber = 123456;
double closedProfit;
int lastorder;
int hstTotal = OrdersHistoryTotal();
for(int i = hstTotal -1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mymagicnumber) {
closedProfit = OrderProfit();
lastorder = OrderType();
break;
}
}
}
//---- detect trading signal ---------------------------------------------------------------+
double close = NormalizeDouble(iClose(NULL,0,0),digits);
double open = NormalizeDouble(iOpen(NULL,0,0),digits);
double o = NormalizeDouble(Upper,digits);
double u = NormalizeDouble(Lower,digits);
total=OrdersTotal();
if(total<1)
{
static datetime tradingAllowed;
int newCount = HistoryTotal(); static int prevCount;
if (newCount != prevCount){ prevCount = newCount;
datetime lastClose;
for(int pos=newCount-1; pos >= 1; pos--) if (
OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)
&& OrderCloseTime() > lastClose
&& OrderTicket() == ticket
&& OrderSymbol() == Symbol()
&& OrderType() <= OP_SELL){
lastClose = OrderCloseTime();
}
datetime lastClosePlus24Hrs = lastClose + 2* 3600;
tradingAllowed = lastClosePlus24Hrs;
}
if (TimeCurrent() <= tradingAllowed) return(0);
if(AccountFreeMargin()<(1000*Lots))
{Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
//check for long position
if (closedProfit>=0)
{
if (iOpen(NULL,0,0) > u && iClose(NULL,0,0) < u)
{
RefreshRates(); // Refresh rates
SL=Bid + main_sl; // Calculating SL of opened
TP=Bid - main_tp; // Calculating TP of opened
ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,123456);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
} // Criterion for opening Sell
if (iOpen(NULL,0,0) < o && iClose(NULL,0,0) > o)
{
RefreshRates(); // Refresh rates
SL=Ask - main_sl; // Calculating SL of opened
TP=Ask + main_tp;
ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,123456);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
}
// Criterion for opening Sell
if (closedProfit < 0) {
// if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, StopLoss, TakeProfit, NULL, mymagicnumber);
}
}
return(0);
}
int maxDuration = 20 * 60; // 20 minutes
for(int posi = OrdersTotal()-1; posi >= 0 ; posi--) if (
OrderSelect(posi, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber() == 123456 // my magic number
&& OrderSymbol() == Symbol() ){ // and period and symbol
int duration = TimeCurrent() - OrderOpenTime();
if (duration >= maxDuration)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(),
2 * my_point);
}
return(0);
}
|