int iBarShift( string symbol, // символ int timeframe, // период datetime time, // время bool exact=false // режим );
Вставляете время закрытия позиции и получаете номер бара
int shift=iBarShift(NULL,0,closePos);
Это все еще не работает.
input ulong MagicNumber = 999; void OnTick() { DrawProfit(); } //+------------------------------------------------------------------+ void DrawProfit() { double profit = 0; ulong ticket; string CurrDate = TimeToString(TimeCurrent(), TIME_DATE); HistorySelect(StringToTime(CurrDate), TimeCurrent()); for(int i = HistoryDealsTotal() - 1; i >= 0; i--) { ticket = HistoryDealGetTicket(i); if(ticket > 0) { if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == MagicNumber) { profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); long closePos = HistoryDealGetInteger(ticket, DEAL_TIME); int shift= iBarShift ( NULL , 0 ,closePos); ObjectCreate(0,StringFormat("Profit %s",profit),OBJ_TEXT,0,shift,profit); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_FONTSIZE,8); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_BGCOLOR,clrGreen); ObjectSetString(0,StringFormat("Profit %s",profit),OBJPROP_TEXT,(string)profit); break; } } } }
diegotfcastro:
Это все еще не работает.
У функцию создания объекта вставляется дата и цена, а не индекс бара и цена. Так же делайте это datetime (так понятнее что это).
datetime closePos = (datetime) HistoryDealGetInteger(ticket, DEAL_TIME); ObjectCreate(0,StringFormat("Profit %s",profit),OBJ_TEXT,0,closePos,profit);
Добавьте проверки ошибок... Имя вынесите отдельно, а не каждый раз его формируйте
string name = StringFormat("Profit %s",profit); ObjectCreate(0,name,OBJ_TEXT,0,closePos,profit); и т.д.
Я не знаю, что случилось, это не работает;
input ulong MagicNumber = 999; void OnTick() { DrawProfit(); } //+------------------------------------------------------------------+ void DrawProfit() { double profit = 0; ulong ticket; string CurrDate = TimeToString(TimeCurrent(), TIME_DATE); HistorySelect(StringToTime(CurrDate), TimeCurrent()); for(int i = HistoryDealsTotal() - 1; i >= 0; i--) { ticket = HistoryDealGetTicket(i); if(ticket > 0) { if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == MagicNumber) { profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); long closePos = HistoryDealGetInteger(ticket, DEAL_TIME); int shift= iBarShift (_Symbol ,Period() ,closePos); string name = StringFormat ( "Profit %s" ,profit); ObjectCreate ( 0 ,name, OBJ_TEXT , 0 ,closePos,profit); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_FONTSIZE,8); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,StringFormat("Profit %s",profit),OBJPROP_BGCOLOR,clrGreen); ObjectSetString(0,StringFormat("Profit %s",profit),OBJPROP_TEXT,(string)profit); } } } }
diegotfcastro:
Я не знаю, что случилось, это не работает;
Везде, где
StringFormat("Profit %s",profit)
замените на
name
Мы приближаемся к цели, но все еще не работает.
Я увидел, что информация появляется в окне объекта.
Но на графике его нет.
input ulong MagicNumber = 999; void OnTick() { DrawProfit(); } //+------------------------------------------------------------------+ void DrawProfit() { double profit = 0; ulong ticket; string CurrDate = TimeToString(TimeCurrent(), TIME_DATE); HistorySelect(StringToTime(CurrDate), TimeCurrent()); for(int i = HistoryDealsTotal() - 1; i >= 0; i--) { ticket = HistoryDealGetTicket(i); if(ticket > 0) { if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == MagicNumber) { profit = HistoryDealGetDouble(ticket, DEAL_PROFIT); long closePos = HistoryDealGetInteger(ticket, DEAL_TIME); int shift= iBarShift (_Symbol ,Period() ,closePos); string name = (string) ticket; ObjectCreate (0 ,name, OBJ_TEXT , 0 ,closePos,profit); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrGreen); ObjectSetString(0,name,OBJPROP_TEXT,(string)profit); } } } }
Нужно добавить фильтр. Либо по способу изменения позиции (вход в рынок или выход из него). Либо по профиту. Грубо говоря, все что имеет результат отличный от нуля.
Покажите параметры объекта (цену и дату)
Покажите параметры объекта (цену и дату)
void DrawProfit(int MagicNumber) { long dealTime = 0; double dealPrice = 0.0; double dealProfit = 0.0; ulong ticket = 0; string CurrDate = TimeToString(TimeCurrent(), TIME_DATE); HistorySelect(StringToTime(CurrDate), TimeCurrent()); for(int i = HistoryDealsTotal() - 1; i >= 0; i--) { ticket = HistoryDealGetTicket(i); if(ticket > 0) { if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == MagicNumber) { dealTime = HistoryDealGetInteger(ticket, DEAL_TIME); dealPrice = HistoryDealGetDouble(ticket, DEAL_PRICE); dealProfit = HistoryDealGetDouble(ticket, DEAL_PROFIT); string name = (string)ticket; ObjectCreate (0 ,name, OBJ_TEXT , 0 , dealTime, dealPrice); ObjectSetInteger(0,name,OBJPROP_FONTSIZE,8); ObjectSetInteger(0,name,OBJPROP_COLOR,clrWhite); ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrGreen); ObjectSetString(0,name,OBJPROP_TEXT,(string)dealProfit); } } } }
Оба, ты сделал это!
Спасибо, вы были великолепны!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пока мне удалось добраться сюда, но я все еще не смог заставить его делать то, что мне нужно.
В качестве демонстрации следую моей цели: