Зачем дублировать вопрос?
https://forum.mql4.com/ru/70644/page6#1027280
Продублирую ответ.
Стрелки на графике выставляются исключительно в результате вызова функций OrderSend, OrderModify, OrderClose, OrderCloseBy, OrderDelete из MQL4-программы, при условии, что в этих функциях выставлен цвет стрелки. отличный от CLR_NONE
Если ордер был закрыт сервером или вручную, открыт, модифицирован вручную (то есть, не из MQL4-программы), то никакие стрелки не выставляются.
Покажите в коде Вашей программы вызов функции OrderClose с выставленным цветом стрелки.
PS OrderModify выставляет цвет стрелки - я сам это проверил несколько раз.
PPS За декомпил и троллинг - бан. То есть, я не даю Вам никакого шанса на ответ
В тестере все нормально, все показывается, на демо-счете (и в реале)этого нет, ни Arrow tp ни Arrow sl ни trailing линий. Хоть советники,хоть в ручную ордера липи, их просто нет. В прошлых билдах все былонормально, правда не могу сказать, с какого билда это началось, но помоемому в 700-тых было все нормально с этим.
Может бан за рекламу?
Я бы ещё промолчал если бы это небыла мать всех кухонь.
Может бан за рекламу?
Я бы ещё промолчал если бы это небыла мать всех кухонь.
Может бан за рекламу?
Я бы ещё промолчал если бы это небыла мать всех кухонь.
Вы про что?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В тестере все нормально, все показывается, на демо-счете (и в реале) этого нет, ни Arrow tp ни Arrow sl ни trailing линий. Хоть советники, хоть в ручную ордера липи, их просто нет. В прошлых билдах все было нормально, правда не могу сказать, с какого билда это началось, но по моемому в 700-тых было все нормально с этим. Думал проблема в Windows 10, ан нет, на Windows 2012R2 такая-же ситуация, причем установка mt4 с нуля, т.е. его никогда не устанавливали на эту систему.
Причем в списке объектов графика тоже они отсутствуют (кнопку "Все" нажимал, если что).
А вот тестер
Может я не прав? Так и должно быть?
Даже ручное выставление ордера, и его TP или SL закрытия не показываются.
Кусок кода советника который на картинках (один из многих - около сорока в моем исследовании):
...
int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,NULL,Magic_long,0,Lime);
...
int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,NULL,Magic_short,0,Red);
...
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)Print("Modifying long direction order ticket : ",OrderTicket());
OrderModify(OrderTicket(), price_long, OrderStopLoss(), tp_long, 0, Lime);
...
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)Print("Modifying short direction order ticket : ",OrderTicket());
OrderModify(OrderTicket(), price_short, OrderStopLoss(), tp_short, 0, Red);
...
и остальные, подобные, тоже.
К стати, только что попробовал MT5 терминал (мало ли, может действительно с Windows 10 или с 2012R2 что то не так) - все отлично, все значки как и должны быть - на графике, и в ручную и с любыми советниками.
Но мне нужен MT4 терминал, иначе я бы эту тему не поднимал бы.
Это пример работы приведенного мной выше кода в совершенно другой (чистой) ОС, и с нуля поставленного MT4:
Полный код советника, если уж на то пошло:
//+------------------------------------------------------------------+
//| kolya1.mq4 |
//| moralproxy |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "moralproxy"
#property link "https://www.mql5.com"
#property version "AP_3.0.1_2Sides_mod"
#property strict
extern string _1_= "LONG DIRECTION";
extern double Lots_long = 0.01;
extern double LotMultiplicator_long = 1.1;
extern double TakeProfit_long = 5;
extern double Step_long = 5;
extern int Magic_long = 1;
extern int MaxTrades_long = 30;
extern string _2_ = "SHORT DIRECTION";
extern double Lots_short = 0.01;
extern double LotMultiplicator_short = 1.1;
extern double TakeProfit_short = 5;
extern double Step_short = 5;
extern int Magic_short = 2;
extern int MaxTrades_short = 30;
extern string _3_ = "COMMON";
extern int Slippage = 3;
extern bool ShowTableOnTesting = FALSE;
int g_color_548 = Gold;
string gs_104 = "AP_3.0.1_2Sides_mod";
int g_fontsize_544 = 14; int bartime = 0; int gi_340 = 16; int gi_336 = 2; int co;
bool modify_flag_long = FALSE; bool Step_long_flag = FALSE; bool mod_flag_long = FALSE;
bool modify_flag_short = FALSE; bool Step_short_flag = FALSE; bool mod_flag_short = FALSE;
double tp_long; double bid_long; double ask_long;
double tp_short; double bid_short; double ask_short;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
{
if (((!IsOptimization()) && !IsTesting() && (!IsVisualMode())) || (ShowTableOnTesting && IsTesting() && (!IsOptimization()))) {
info();
}
if(bartime == Time[0]) return (0);
bartime = Time[0];
if( count_long ()==0)
{
double closebar1_long = iClose(Symbol(), 0, 1);
double closebar2_long = iClose(Symbol(), 0, 2);
bid_long = Bid;
ask_long = Ask;
if(closebar2_long < closebar1_long)
{
Print("Opening first order of long series");
int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,NULL,Magic_long,0,Lime);
modify_flag_long = TRUE;
if(ticket_long<0)
{
Print("Error openinig first order of long series: ", GetLastError());
}
}
}
if( count_short ()==0)
{
double closebar1_short = iClose(Symbol(), 0, 1);
double closebar2_short = iClose(Symbol(), 0, 2);
bid_short = Bid;
ask_short = Ask;
if(closebar2_short > closebar1_short)
{
Print("Openinig first order of short series");
int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,NULL,Magic_short,0,Red);
modify_flag_short = TRUE;
if(ticket_short<0)
{
Print("Error openinig first order of short series: ", GetLastError());
}
}
}
if(count_long ()!=0 && count_long ()<= MaxTrades_long)
{
RefreshRates();
if(OOP_long()-Ask >= Step_long*Point)
{
Print("Step time long, opening " +(count_long()+1)+ "order of long series");
int ticket_long = OrderSend(Symbol(),OP_BUY,Multed_lot_long(),Ask,Slippage,0,0,NULL,Magic_long,0,Lime);
modify_flag_long = TRUE;
if(ticket_long<0)
{
Print("Error openinig "+ (count_long()+1)+" order of series: ", GetLastError());
}
}
}
if(count_short ()!=0 && count_short ()<= MaxTrades_short)
{
RefreshRates();
if(Bid - OOP_short() >= Step_short*Point)
{
Print("Step time short, opening " +(count_short()+1)+ "order of short series");
int ticket_short = OrderSend(Symbol(),OP_SELL,Multed_lot_short(),Bid,Slippage,0,0,NULL,Magic_short,0,Red);
modify_flag_short = TRUE;
if(ticket_short<0)
{
Print("Error openinig "+ (count_short()+1)+" order of short series: ", GetLastError());
}
}
}
double price_long = 0;
double tl_long = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long) {
if (OrderType() == OP_BUY) {
price_long += OrderOpenPrice() * OrderLots();
tl_long += OrderLots();
}
}
}
if(count_long()>0)
{
price_long = NormalizeDouble(price_long / tl_long, Digits);
if(modify_flag_long ==TRUE)
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long) {
if (OrderType() == OP_BUY) {
tp_long = price_long + TakeProfit_long * Point;
mod_flag_long=TRUE;
}
}
}
}
}
if(mod_flag_long == TRUE && modify_flag_long ==TRUE)
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)Print("Modifying long direction order ticket : ",OrderTicket()); OrderModify(OrderTicket(), price_long, OrderStopLoss(), tp_long, 0, Lime);
modify_flag_long = FALSE;
}
}
double price_short = 0;
double tl_short = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short) {
if (OrderType() == OP_SELL) {
price_short += OrderOpenPrice() * OrderLots();
tl_short += OrderLots();
}
}
}
if(count_short()>0 )
{
price_short = NormalizeDouble(price_short / tl_short, Digits);
if(modify_flag_short ==TRUE)
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short) {
if (OrderType() == OP_SELL) {
tp_short = price_short - TakeProfit_short * Point;
mod_flag_short=TRUE;
}
}
}
}
}
if(mod_flag_short == TRUE && modify_flag_short ==TRUE)
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)Print("Modifying short direction order ticket : ",OrderTicket()); OrderModify(OrderTicket(), price_short, OrderStopLoss(), tp_short, 0, Red);
modify_flag_short = FALSE;
}
}
hangorder(co);
co=hangorder(co);
Comment("Hanged orders",co);
return(0);
}
//+------------------------------------------------------------------+
double Multed_lot_long()
{
double mll;
double m = count_long()-1;
double x;
if(m<0)
{
x=0;
}
else if(m>=0)
{
x = count_long()-1;
}
mll = NormalizeDouble(Lots_long * MathPow(LotMultiplicator_long, x), 2);
Print("Current multiplicated long lot is : ",mll);
return(mll);
}
double Multed_lot_short()
{
double mls;
double m = count_short()-1;
double x;
if(m<0)
{
x=0;
}
else if(m>=0)
{
x = count_short()-1;
}
mls = NormalizeDouble(Lots_short * MathPow(LotMultiplicator_short, x), 2);
Print("Current multiplicated short lot is : ",mls);
return(mls);
}
double OOP_long() {
double oop;
int ticket1;
int ticket2=0;
for ( int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long && OrderType() == OP_BUY) {
ticket1 = OrderTicket();
if (ticket1 > ticket2) {
oop = OrderOpenPrice();
ticket2=ticket1;
}
}
}
return (oop);
}
double OOP_short() {
double oop;
int ticket1;
int ticket2=0;
for ( int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short && OrderType() == OP_SELL) {
ticket1 = OrderTicket();
if (ticket1 > ticket2) {
oop = OrderOpenPrice();
ticket2=ticket1;
}
}
}
return (oop);
}
int count_long (){
int count = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_long) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long)
if (OrderType() == OP_BUY) count++;
}
return (count);
}
int count_short (){
int count = 0;
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic_short) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_short)
if (OrderType() == OP_SELL) count++;
}
return (count);
}
void info (){
double ld_0 = f0_8(0);
string name_8 = gs_104 + "1";
if (ObjectFind(name_8) == -1) {
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
ObjectSet(name_8, OBJPROP_YDISTANCE, 15);
}
ObjectSetText(name_8, "Заработок сегодня: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
ld_0 = f0_8(1);
name_8 = gs_104 + "2";
if (ObjectFind(name_8) == -1) {
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
ObjectSet(name_8, OBJPROP_YDISTANCE, 33);
}
ObjectSetText(name_8, "Заработок вчера: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
ld_0 = f0_8(2);
name_8 = gs_104 + "3";
if (ObjectFind(name_8) == -1) {
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
ObjectSet(name_8, OBJPROP_YDISTANCE, 51);
}
ObjectSetText(name_8, "Заработок позавчера: " + DoubleToStr(ld_0, 2), g_fontsize_544, "Courier New", g_color_548);
name_8 = gs_104 + "4";
if (ObjectFind(name_8) == -1) {
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 10);
ObjectSet(name_8, OBJPROP_YDISTANCE, 76);
}
ObjectSetText(name_8, "Баланс : " + DoubleToStr(AccountBalance(), 2), g_fontsize_544, "Courier New", g_color_548);
}
double f0_8(int ai_0) {
double ld_ret_4 = 0;
for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
if (!(OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY))) break;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_long||OrderMagicNumber() == Magic_short)
if (OrderCloseTime() >= iTime(Symbol(), PERIOD_D1, ai_0) && OrderCloseTime() < iTime(Symbol(), PERIOD_D1, ai_0) + 86400) ld_ret_4 = ld_ret_4 + OrderProfit() + OrderCommission() + OrderSwap();
}
return (ld_ret_4);
}
int hangorder(int a)
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderTakeProfit()==0)
a++;
}
return(a);
}
ПС: MT4 терминал пробовал удалять, чистить реестр с упоминанием MetaQuotes и InstaTrader и установкой заново. Разрешение экрана 1920х1080