|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Entscheidungswert im Chart anzeigen
Hi,
ich mцchte mir den % Wert der Equity im Chart anzeigen lassen um zu sehen wann der Stopp greift. Fьr den Equity Stopp habe ich folgenden Code: Code:
if (UseEquityStop) { if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) { CloseThisSymbolAll(); Print("Closed All due to Stop Out"); NewOrdersPlaced = FALSE; } } Danke |
|
|||
Das geht z.B. ьber die Comment()-Funktion:
Zitat:
|
|
|||
hi,
ja Comment zum anzeigen aber wie bekomme ich den Wert ? Code:
Riskprozent = (ld_40 < 0.0 && MathAbs(ld_40) > TotalEquityRisk / 100.0 * AccountEquityHigh()); |
|
|||
Und genau an dieser Stelle ist bei mir Ende!
Ich gebe bei gecrackten Versionen keine weiteren Informationen. traderdoc |
|
|||
keine Ahnung ob das ding gecrackt ist oder nicht aber man kann sich den EA
hier runterladen Ilan1.6 PipStepRSI Macht fьr mich nicht den eindruck das die dort gecrackte versionen haben |
|
|||
Glaube es mir, dass es eine gecrackte Version ist.
Zukьnftig kannst Du das selbst z.B. an ld_40 erkennen. Die Ziffern laufen dann in 6er-Schritten weiter und statt ld kцnnen auch anderen Buchstabenkombinationen stehen. traderdoc |
|
|||
ah ok danke.
lцst zwar mein Problem nicht aber gut zu wissen. Dann hab ich davon hier ne ganze menge da ich immer nach Code Schnipsel suche im netz |
|
|||
Aber Du hast vollkommen recht mit deiner Einstellung sowas nicht zu unterstьtzen
|
|
|||
Дhm, merkwьrdigerweise steht diese Codezeile
Riskprozent = (ld_40 < 0.0 && MathAbs(ld_40) > TotalEquityRisk / 100.0 * AccountEquityHigh()); nicht! in dem EA, welche ьber Deine angegebene Seite downloadbar ist!! Tz, Tz. traderdoc |
|
|||
kann auch nicht das ist ja mein eigener versuch.
das hier ist der Komplette Code von dem ganzen heiЯt Ilan1.6. Mir ging auch nur um dieses eine stьck Code darin wo er das Equity Risiko berechnet weil ich genau das im Chart sehen will. Der EA selbst interessiert mich gar nicht Code:
//нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн #property copyright "" #property link "" //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double Stoploss = 500.0; double TrailStart = 10.0; double TrailStop = 10.0; //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн extern double LotExponent = 1.59; // умножение лотов в серии по експоненте для вывода в безубыток. первый лот 0.1, серия: 0.16, 0.26, 0.43 ... extern double slip = 3.0; int gi_unused_88; extern double Lots = 0.01; // теперь можно и микролоты 0.01 при этом если стоит 0.1 то следующий лот в серии будет 0.16 extern int lotdecimal = 2; // 2 - микролоты 0.01, 1 - мини лоты 0.1, 0 - нормальные лоты 1.0 extern double TakeProfit = 10.0; extern double PipStep = 30.0; extern int MagicNumber = 2222; //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн int MaxTrades = 10; bool UseEquityStop = FALSE; double TotalEquityRisk = 20.0; bool UseTrailingStop = FALSE; bool UseTimeOut = FALSE; double MaxTradeOpenHours = 48.0; //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double PriceTarget, StartEquity, BuyTarget, SellTarget; double AveragePrice, SellLimit, BuyLimit; double LastBuyPrice, LastSellPrice, Spread; bool flag; string EAName="Ilan1.6"; int timeprev = 0, expiration; int NumOfTrades = 0; double iLots; int cnt = 0, total; double Stopper = 0.0; bool TradeNow = FALSE, LongTrade = FALSE, ShortTrade = FALSE; int ticket; bool NewOrdersPlaced = FALSE; double AccountEquityHighAmt, PrevEquity; //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн int init() { Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point; return (0); } int deinit() { return (0); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн int start() { double PrevCl; double CurrCl; if (UseTrailingStop) TrailingAlls(TrailStart, TrailStop, AveragePrice); if (UseTimeOut) { if (TimeCurrent() >= expiration) { CloseThisSymbolAll(); Print("Closed All due to TimeOut"); } } if (timeprev == Time[0]) return (0); timeprev = Time[0]; double CurrentPairProfit = CalculateProfit(); if (UseEquityStop) { if (CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh()) { CloseThisSymbolAll(); Print("Closed All due to Stop Out"); NewOrdersPlaced = FALSE; } } total = CountTrades(); if (total == 0) flag = FALSE; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { LongTrade = TRUE; ShortTrade = FALSE; break; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_SELL) { LongTrade = FALSE; ShortTrade = TRUE; break; } } } if (total > 0 && total <= MaxTrades) { RefreshRates(); LastBuyPrice = FindLastBuyPrice(); LastSellPrice = FindLastSellPrice(); if (LongTrade && LastBuyPrice - Ask >= PipStep * Point) TradeNow = TRUE; if (ShortTrade && Bid - LastSellPrice >= PipStep * Point) TradeNow = TRUE; } if (total < 1) { ShortTrade = FALSE; LongTrade = FALSE; TradeNow = TRUE; StartEquity = AccountEquity(); } if (TradeNow) { LastBuyPrice = FindLastBuyPrice(); LastSellPrice = FindLastSellPrice(); if (ShortTrade) { NumOfTrades = total; iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal); RefreshRates(); ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink); if (ticket < 0) { Print("Error: ", GetLastError()); return (0); } LastSellPrice = FindLastSellPrice(); TradeNow = FALSE; NewOrdersPlaced = TRUE; } else { if (LongTrade) { NumOfTrades = total; iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal); ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime); if (ticket < 0) { Print("Error: ", GetLastError()); return (0); } LastBuyPrice = FindLastBuyPrice(); TradeNow = FALSE; NewOrdersPlaced = TRUE; } } } if (TradeNow && total < 1) { PrevCl = iClose(Symbol(), 0, 2); CurrCl = iClose(Symbol(), 0, 1); SellLimit = Bid; BuyLimit = Ask; if (!ShortTrade && !LongTrade) { NumOfTrades = total; iLots = NormalizeDouble(Lots * MathPow(LotExponent, NumOfTrades), lotdecimal); if (PrevCl > CurrCl) { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > 30.0) { ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink); if (ticket < 0) { Print("Error: ", GetLastError()); return (0); } LastBuyPrice = FindLastBuyPrice(); NewOrdersPlaced = TRUE; } } else { if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < 70.0) { ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime); if (ticket < 0) { Print("Error: ", GetLastError()); return (0); } LastSellPrice = FindLastSellPrice(); NewOrdersPlaced = TRUE; } } if (ticket > 0) expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours); TradeNow = FALSE; } } total = CountTrades(); AveragePrice = 0; double Count = 0; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY || OrderType() == OP_SELL) { AveragePrice += OrderOpenPrice() * OrderLots(); Count += OrderLots(); } } } if (total > 0) AveragePrice = NormalizeDouble(AveragePrice / Count, Digits); if (NewOrdersPlaced) { for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { PriceTarget = AveragePrice + TakeProfit * Point; BuyTarget = PriceTarget; Stopper = AveragePrice - Stoploss * Point; flag = TRUE; } } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_SELL) { PriceTarget = AveragePrice - TakeProfit * Point; SellTarget = PriceTarget; Stopper = AveragePrice + Stoploss * Point; flag = TRUE; } } } } if (NewOrdersPlaced) { if (flag == TRUE) { for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(), AveragePrice, OrderStopLoss(), PriceTarget, 0, Yellow); NewOrdersPlaced = FALSE; } } } return (0); } //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн int CountTrades() { int count = 0; for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++; } return (count); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн void CloseThisSymbolAll() { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() == Symbol()) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue); if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red); } Sleep(1000); } } } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн int OpenPendingOrder(int pType, double pLots, double pLevel, int sp, double pr, int sl, int tp, string pComment, int pMagic, int pDatetime, color pColor) { int ticket = 0; int err = 0; int c = 0; int NumberOfTries = 100; switch (pType) { case 2: for (c = 0; c < NumberOfTries; c++) { ticket = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(1000); } break; case 4: for (c = 0; c < NumberOfTries; c++) { ticket = OrderSend(Symbol(), OP_BUYSTOP, pLots, pLevel, sp, StopLong(pr, sl), TakeLong(pLevel, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(5000); } break; case 0: for (c = 0; c < NumberOfTries; c++) { RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, pLots, Ask, sp, StopLong(Bid, sl), TakeLong(Ask, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(5000); } break; case 3: for (c = 0; c < NumberOfTries; c++) { ticket = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(5000); } break; case 5: for (c = 0; c < NumberOfTries; c++) { ticket = OrderSend(Symbol(), OP_SELLSTOP, pLots, pLevel, sp, StopShort(pr, sl), TakeShort(pLevel, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(5000); } break; case 1: for (c = 0; c < NumberOfTries; c++) { ticket = OrderSend(Symbol(), OP_SELL, pLots, Bid, sp, StopShort(Ask, sl), TakeShort(Bid, tp), pComment, pMagic, pDatetime, pColor); err = GetLastError(); if (err == 0/* NO_ERROR */) break; if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break; Sleep(5000); } } return (ticket); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double StopLong(double price, int stop) { if (stop == 0) return (0); else return (price - stop * Point); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ double StopShort(double price, int stop) { if (stop == 0) return (0); else return (price + stop * Point); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ double TakeLong(double price, int stop) { if (stop == 0) return (0); else return (price + stop * Point); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ double TakeShort(double price, int stop) { if (stop == 0) return (0); else return (price - stop * Point); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double CalculateProfit() { double Profit = 0; for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit(); } return (Profit); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн void TrailingAlls(int pType, int stop, double AvgPrice) { int profit; double stoptrade; double stopcal; if (stop != 0) { for (int trade = OrdersTotal() - 1; trade >= 0; trade--) { if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUY) { profit = NormalizeDouble((Bid - AvgPrice) / Point, 0); if (profit < pType) continue; stoptrade = OrderStopLoss(); stopcal = Bid - stop * Point; if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Aqua); } if (OrderType() == OP_SELL) { profit = NormalizeDouble((AvgPrice - Ask) / Point, 0); if (profit < pType) continue; stoptrade = OrderStopLoss(); stopcal = Ask + stop * Point; if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0, Red); } } Sleep(1000); } } } } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double AccountEquityHigh() { if (CountTrades() == 0) AccountEquityHighAmt = AccountEquity(); if (AccountEquityHighAmt < PrevEquity) AccountEquityHighAmt = PrevEquity; else AccountEquityHighAmt = AccountEquity(); PrevEquity = AccountEquity(); return (AccountEquityHighAmt); } //нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн double FindLastBuyPrice() { double oldorderopenprice; int oldticketnumber; double unused = 0; int ticketnumber = 0; for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) { oldticketnumber = OrderTicket(); if (oldticketnumber > ticketnumber) { oldorderopenprice = OrderOpenPrice(); unused = oldorderopenprice; ticketnumber = oldticketnumber; } } } return (oldorderopenprice); } double FindLastSellPrice() { double oldorderopenprice; int oldticketnumber; double unused = 0; int ticketnumber = 0; for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue; if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) { oldticketnumber = OrderTicket(); if (oldticketnumber > ticketnumber) { oldorderopenprice = OrderOpenPrice(); unused = oldorderopenprice; ticketnumber = oldticketnumber; } } } return (oldorderopenprice); } //ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн |
Lesezeichen |
Stichworte |
chart, equity, mql4, programmierung, programmierung metatrader |
|
|