Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich habe noch nie ein OnTradeTransaction ()-Ereignis behandelt. Es bestand keine Notwendigkeit, dies zu tun, da die Handelslogik nicht berücksichtigen musste, was das Ereignis auslöste. SL oder TP. Wollen Sie damit andeuten, dass dies ein Beweis für meine Handelserfahrung ist?)))
Ich lese sehr aufmerksam, aber ich sehe niemanden, der eine vernünftige Antwort in Form eines funktionierenden Codes gibt. Oder ist es ein verdammt großes Geheimnis und eine große Zauberei - das geheime Wissen und die Fähigkeit zu bestimmen, was funktioniert?
Ich schreibe keine EAs zu bestellen, vor allem für FOREX.
Sie haben nun alle notwendigen Kenntnisse, um einen vernünftigen Code zu schreiben,
die Ihren Bedürfnissen entspricht.
Ich schreibe keine EAs auf Bestellung, insbesondere nicht für FOREX.
Jetzt haben Sie alle Kenntnisse, die Sie brauchen, um einen vernünftigen Code zu schreiben,
die Ihren Bedürfnissen entspricht.
Und wer hat Sie gebeten, auf Bestellung zu schreiben?
Eine Frage in diesem Forum zu stellen, bedeutet heutzutage, auf Bestellung zu schreiben?
Fahrt zur Hölle, ihr alle. Sie sind Verkäufer.
...
Und wenn Sie sich die Kontohistorie ansehen, um den Kommentar des letzten Handels zu sehen, wäre das in Ordnung?
So etwas in der Art:
//| Возвращает причину закрытия позиции по Take Profit |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByTakeProfit(const string symbol)
{
//--- Получим комментарий последней сделки на указанном символе
string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "tp"
if(StringFind(last_comment,"tp",0)>-1)
return(true);
//--- Если нет строки "tp"
return(false);
}
//+------------------------------------------------------------------+
//| Возвращает причину закрытия позиции по Stop Loss |
//+------------------------------------------------------------------+
bool CAccountHistory::IsClosedByStopLoss(const string symbol)
{
//--- Получим комментарий последней сделки на указанном символе
string last_comment=LastDealComment(symbol);
//--- Если в комментарии есть строка "sl"
if(StringFind(last_comment,"sl",0)>-1)
return(true);
//--- Если нет строки "sl"
return(false);
}
//+------------------------------------------------------------------+
//| Возвращает комментарий последней сделки на указанном символе |
//+------------------------------------------------------------------+
string CAccountHistory::LastDealComment(const string symbol)
{
int total_deals =0; // Всего сделок в списке выбранной истории
string deal_symbol =""; // Символ сделки
string deal_comment =""; // Комментарий сделки
//--- Если история сделок получена
if(HistorySelect(0,TimeCurrent()))
{
//--- Получим количество сделок в полученном списке
total_deals=HistoryDealsTotal();
//--- Пройдемся по всем сделкам в полученном списке от последней сделки к первой
for(int i=total_deals-1; i>=0; i--)
{
//--- Получим комментарий сделки
deal_comment=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_COMMENT);
//--- Получим символ сделки
deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
//--- Если символ сделки и текущий символ равны, остановим цикл
if(deal_symbol==symbol)
break;
}
}
//---
return(deal_comment);
}
Und wenn Sie sich die Kontohistorie ansehen, um den Kommentar der letzten Transaktion zu sehen, wäre das in Ordnung?
So etwas in der Art:
Vielen Dank, lieber Mann!
Wahrscheinlich ist dies die zuverlässigste Methode, da SL und TP sich verschieben können und ein Preisvergleich sinnlos wäre.
Und wenn Sie sich die Kontohistorie ansehen, um den Kommentar zur letzten Transaktion zu sehen, wäre das in Ordnung?
So etwas in der Art:
Und wenn es keinen Kommentar gibt (was durchaus möglich ist)?
Dies ist wahrscheinlich die zuverlässigste Methode, da SL und TP sich verschieben können und ein Preisvergleich nutzlos wäre.
{
int OrderType=(int)::HistoryOrderGetInteger(OrderTicket,ORDER_TYPE);
if((OrderType==ORDER_TYPE_BUY) || (OrderType==ORDER_TYPE_SELL))
{
const string OrderComment=HistoryOrderGetString(OrderTicket,ORDER_COMMENT);
const string OrderPrice=::DoubleToString(::HistoryOrderGetDouble(OrderTicket,ORDER_PRICE_OPEN),
(int)::SymbolInfoInteger(HistoryOrderGetString(OrderTicket,ORDER_SYMBOL),SYMBOL_DIGITS));
if(OrderComment=="tp "+OrderPrice)
OrderType=ORDER_TYPE_TAKEPROFIT;
else if(OrderComment=="sl "+OrderPrice)
OrderType=ORDER_TYPE_STOPLOSS;
}
return(OrderType);
}
Was ist, wenn es keinen Kommentar gibt (was durchaus möglich ist)?
Das ist natürlich gut möglich. Ich verwende diese Methode für die Analyse des Verlaufs im Tester, da sie am einfachsten und schnellsten ist.
In diesem Fall muss ich Tickets mit schwebenden Aufträgen erstellen und auswerten. Ich habe kein fertiges Beispiel zur Hand.
Schließen einer Position zu erfahren.
Dies ist kein willkürlicher Vorwurf, sondern das Ergebnis stundenlanger Versuche, herauszufinden (kein HistorySelectByPosition und anderes Zeug hilft), wie alles funktioniert. Und ich entschuldige mich gerne, wenn ich falsch liege. Um nicht unbegründet zu sein, zeige ich einen Expert Advisor für den Tester (es ist leichter zu verstehen) auf dem Server RoboForexEU-MetaTrader 5, die eine Position eröffnet, dann setzt SL und TP Ebenen.
In diesem EA können SL und TP einer einzelnen geschlossenen Position nicht definiert werden (in OnDeinit). Soll das so sein?
Das ist natürlich gut möglich. Ich verwende diese Option, um den Verlauf im Tester zu analysieren, da sie am einfachsten und schnellsten ist.
Und so müssen Sie mit ausstehenden Aufträgen verfahren und die Tickets analysieren. Ich habe kein fertiges Beispiel zur Hand.
Was hat Ihnen an dieser Methode nicht gefallen?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;
Was ist an dieser Methode falsch?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;