Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non scrivo EAs su ordinazione, specialmente per il FOREX.
Ora avete tutte le conoscenze necessarie per scrivere un codice sensato,
che soddisfa le vostre esigenze.
E chi le ha chiesto di scrivere su ordinazione?
Fare una domanda su questo forum al giorno d'oggi significa scrivere per ordinare?
Andate all'inferno, tutti quanti. Voi venditori.
...
E se si guarda la cronologia del conto per vedere il commento dell'ultimo trade, andrebbe bene?
Qualcosa del genere:
//| Возвращает причину закрытия позиции по 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);
}
E se si guarda la cronologia del conto per vedere il commento dell'ultima transazione, andrebbe bene?
Qualcosa del genere:
Grazie uomo gentile!
Probabilmente il modo più affidabile, dato che SL e TP possono scivolare e confrontare i prezzi sarebbe inutile.
E se si guarda la cronologia del conto per vedere il commento dell'ultima transazione, andrebbe bene?
Qualcosa del genere:
E se non ci sono commenti (il che è del tutto possibile)?
Questo è probabilmente il modo più affidabile, dato che SL e TP possono scivolare e un confronto dei prezzi sarebbe inutile.
{
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);
}
E se non c'è nessun commento (il che è del tutto possibile)?
Abbastanza possibile, naturalmente. Io uso questo per analizzare la storia nel tester, come il più semplice e veloce.
In questo caso, devo fare e analizzare biglietti con ordini pendenti. Non ho un esempio pronto a portata di mano.
chiuso una posizione .
Questa non è un'accusa indiscriminata, ma il risultato di ore di tentativi di scoprire (nessuna HistorySelectByPosition e altre cose aiutano) come funziona tutto. E sono felice di scusarmi se mi sbaglio. Per non essere infondato, sto mostrando un Expert Advisor per il tester (è più facile da capire) sul server RoboForexEU-MetaTrader 5, che apre una posizione, poi mette livelli SL e TP.
In questo EA, SL e TP di una singola posizione chiusa non possono essere definiti (in OnDeinit). È previsto che lo faccia?
Abbastanza possibile, naturalmente. Io uso questo per analizzare la storia nel tester, come il più semplice e veloce.
E così con gli ordini pendenti è necessario fare e analizzare i biglietti. Non ho un esempio pronto a portata di mano.
Cosa non ti è piaciuto di questo metodo?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;
Cosa c'è di sbagliato in questo metodo?
if (trans.order != my_order_ticket)
{
//Сработал SL или TP
}
break;
Sì, è più o meno così. Solo che non l'ho ancora testato in questo modo.
Prova...
Aggiunto da
if (trans.order != my_order_ticket)
{
if(trans.symbol==Symbol())
{
if(проверяем магик)
{
//Сработал SL или TP
}
}
}
break;