Да, я под своим аккаунтом на форум вошел и что это даст вам? Просто удовлетворит любопытство?
Так закрыли бы и все перенаправили на форум mql5. Зачем его кастрировать?
Люди ведь продолжают им пользоваться и общаться, а значит он нужен и функционал его нужно оставить!
А так получается, что как всегда, на пользователей и их мнение наплевали и решили все в одностороннем порядке.
Вот именно вас примерно год назад и не спросили, когда принимали решение о прекращении поддержки четвёртого форума. Именно потому, что там очень много полезной информации, его и не грохнули - пользуйтесь. Но как справочной информацией.
Доброго времени суток. Столкнулся с проблемой определения размера лота. Вот код.
Конкретно на Альпари. Конкретно на USD-JPY. Должен выводить на график данные по ордерам, но .....по доллар-йене не может показать корректное значечие!!! Интересует именно данные из массива !
Что можно предпринять дополнительно ???
#property version"1.00"#property strict#property indicator_chart_windowdouble Mas_Ord_Old[1000][19];
double Mas_Ord_New[1000][19];
double Mas_Tip[6];
string Mas_tip[6];
externint FontSize=12;
externcolor TextColor=clrIvory;
externcolor TextColor1=clrGray;
externcolor TextColor2=clrRed;
externcolor TextColor3=clrYellow;
externint X=20;
externint Y=15;
int n;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
Terminal();
//---Comment(" пример неправильного лота ");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+////+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
DeleteLabel();
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)for(int cnt=a9-1;cnt>=0;cnt--)
{
//.. и наша вал.параdouble a0= Mas_Ord_Old [cnt][0]; // OrderTicket(); I // Тикет ордераdouble a1= Mas_Ord_Old [cnt][1]; // OrderOpenPrice(); D // Курс открытия ордdouble a2= Mas_Ord_Old [cnt][2]; // OrderLots(); D // Количество лотов !!!!!!!!!!!!!!!!double a3= Mas_Ord_Old [cnt][3]; // OrderTakeProfit(); D // Курс ТРdouble a4= Mas_Ord_Old [cnt][4]; // OrderSwap(); D // Свопdouble a5= Mas_Ord_Old [cnt][5]; // OrderStopLoss(); D // Курс SLdouble a6= Mas_Ord_Old [cnt][6]; // OrderType(); I // Тип ордераdouble a7= Mas_Ord_Old [cnt][7]; // OrderMagicNumber(); I // Магическое числоdouble a8= Mas_Ord_Old [cnt][8]; //double Aa2= (double)((NormalizeDouble( a2,2))*100);
double Aaa2=(double)((NormalizeDouble( Aa2,2))/100);
// Print("2- OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);string text=StringConcatenate(" Тикет= Опен= ",a1," ЛОТ!!!= ",a2," ЛОТ 2= ",Aa2," 4= ",a4," 5= ",a5," 6= ",a6," 7= ",a7," 8= ",a8);
CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+// double Mas_Ord_Old[1000][9];// double Mas_Ord_New[1000][9];// double Mas_Tip[6];// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bool Terminal()
{
int Qnt=0; // Счётчик количества ордеров//--------------------------------------------------------------- 3 --ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
Qnt=0; // Обнуление счётчика ордеровArrayInitialize(Mas_Ord_New,0); // Обнуление массива// ArrayInitialize(Mas_Tip, 0); // Обнуление массива//--------------------------------------------------------------- 4 --for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
{ //.. и наша вал.пара && (OrderSymbol()==Symbol())if((OrderSelect(i,SELECT_BY_POS)==true) )
{
//------------------------------------------------------ 5 --
Mas_Ord_New[Qnt][0]=OrderTicket(); // Курс открытия орд
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд
Mas_Ord_New[Qnt][2]= OrderLots(); // Курс SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Курс ТР
Mas_Ord_New[Qnt][4]=OrderSwap(); // Номер ордера
Mas_Ord_New[Qnt][5]=OrderStopLoss(); // Количество лотов// Mas_Tip[OrderType()]++; // Кол. ордеров типа
Mas_Ord_New[Qnt][6]=OrderType(); // Тип ордера
Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Магическое числоif (OrderComment()=="")
Mas_Ord_New[Qnt][8]=0; // Если нет комментelse
Mas_Ord_New[Qnt][8]=1; // Если есть коммент
Qnt++; // Колич. ордеров//------------------------------------------------------ 6 --
}
}
Mas_Ord_New[0][10]=Qnt; // Колич. ордеров//--------------------------------------------------------------- 7 --return0;
}
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+--------------------------------------------------------------------+void CreateLabel(string name, string text,int x, int y, color c) //
{ //ObjectCreate(name, OBJ_LABEL,0,0,0); //
ObjectSetText(name,text,FontSize,"Times New Roman",TextColor); //
ObjectSet(name,OBJPROP_CORNER,0
); //
ObjectSet(name,OBJPROP_XDISTANCE,x); //
ObjectSet(name,OBJPROP_YDISTANCE,y); //
ObjectSet(name,OBJPROP_COLOR,c); //
n++; //
} //void DeleteLabel() //
{ //for(int i=ObjectsTotal();i>=0;i--) //
{ //if(StringSubstr(ObjectName(i),0,6)=="Label_") //ObjectDelete(ObjectName(i)); //
} //
} ////+--------------------------------------------------------------------+
Доброго времени суток. Столкнулся с проблемой определения размера лота. Вот код.
Конкретно на Альпари. Конкретно на USD-JPY. Должен выводить на график данные по ордерам, но .....по доллар-йене не может показать корректное значечие!!! Интересует именно данные из массива !
Что можно предпринять дополнительно ???
Но ведь в учебнике Ковалёва всё же работает. Что мешает скопировать с него правильно и подкорректировать под новые требования?
Я видел вашу конкретику. Не стал ковыряться так как считаю всё это избыточным. Все эти терминалы Ковалёва...
Но вот в коде у вас вижу несоответствие сохраняемых данных и описание этих данных в комментариях - уже с толку сбивает.
Далее:
лот у вас распечатывается из переменной a2, а что мы в неё сохраняем? Вот это:
А может вывести нужно через DoubleToString() ?
Да и лот неправильно нормализуете. Нужна функция для нормализации лота. Искать не буду. Можете поискать у Кима - вам подойдёт.
Нашел. Спасибо. Но это не решает поставленную задачу, ибо.
На других ДЦ работает корректно и с таким кодом.
С функцией Кима работает некорректно.
Пишет через DoubleToString() правильно, но считает неправильно. Не буду же я считать через DoubleToString(). Даже если перевести туда и обратно , то пишет стринги нормально а вот дубли из стрингов опять кривые выходят.
Проблема в ДЦ Альпари и нужен скорее костыль что бы обойти эту проблему.
На другой паре USD-SEK некорректно выводит цену открытия.
#property version"1.00"#property strict#property indicator_chart_windowdouble Mas_Ord_Old[1000][19];
double Mas_Ord_New[1000][19];
double Mas_Tip[6];
string Mas_tip[6];
externint FontSize=12;
externcolor TextColor=clrIvory;
externcolor TextColor1=clrGray;
externcolor TextColor2=clrRed;
externcolor TextColor3=clrYellow;
externint X=20;
externint Y=15;
int n;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
Terminal();
//---Comment(" пример неправильного лота ");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+////+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
DeleteLabel();
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---
Terminal();
int shift=15;
DeleteLabel();
n=13;
double proffit=0;
double pro=0;
double stloss=0;
double los=0;
int a9=(int)NormalizeDouble( Mas_Ord_Old [0][10],0);//MathIsValidNumber//for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)for(int cnt=a9-1;cnt>=0;cnt--)
{
//.. и наша вал.параdouble a0= Mas_Ord_Old [cnt][0]; // OrderTicket(); I // Тикет ордераdouble a1= Mas_Ord_Old [cnt][1]; // OrderOpenPrice(); D // Курс открытия ордstring a2= DoubleToString(Mas_Ord_Old [cnt][2],2); // OrderLots(); D // Количество лотов !!!!!!!!!!!!!!!!double a3= Mas_Ord_Old [cnt][3]; // OrderTakeProfit(); D // Курс ТРdouble a4= Mas_Ord_Old [cnt][4]; // OrderSwap(); D // Свопdouble a5= Mas_Ord_Old [cnt][5]; // OrderStopLoss(); D // Курс SLdouble a6= Mas_Ord_Old [cnt][6]; // OrderType(); I // Тип ордераdouble a7= Mas_Ord_Old [cnt][7]; // OrderMagicNumber(); I // Магическое число double a8= Mas_Ord_Old [cnt][8]; // double Aa2= (double)(StringToDouble(a2));
double Aaa2=(double)((NormalizeDouble( Aa2,2))/100);
// Print("2- OrderLots= ",Aa2," OrderType= ",Aaa2," OrderMagicNumber= ",a7," Ciomment= ",a8," кол-во = ",a0);string text=StringConcatenate(" Опен= ",a1," ЛОТ string= ",a2," ЛОТ double= ",Aa2 );
CreateLabel(StringConcatenate("Label_",n),text,X,Y+n*shift,clrYellow);
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+// double Mas_Ord_Old[1000][9];// double Mas_Ord_New[1000][9];// double Mas_Tip[6];// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bool Terminal()
{
int Qnt=0; // Счётчик количества ордеров//--------------------------------------------------------------- 3 --ArrayCopy(Mas_Ord_Old, Mas_Ord_New,0,0,WHOLE_ARRAY);// Сохраняем предыдущую историю
Qnt=0; // Обнуление счётчика ордеровArrayInitialize(Mas_Ord_New,0); // Обнуление массива// ArrayInitialize(Mas_Tip, 0); // Обнуление массива//--------------------------------------------------------------- 4 --for(int i=OrdersTotal()-1; i>=0; i--) // По рыночн. и отлож. ордерам
{ //.. и наша вал.пара && (OrderSymbol()==Symbol())if((OrderSelect(i,SELECT_BY_POS)==true) )
{
//------------------------------------------------------ 5 --
Mas_Ord_New[Qnt][0]=OrderTicket(); // Курс открытия орд
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд
Mas_Ord_New[Qnt][2]=NormalizeLot( OrderLots(),0,Symbol()); // Курс SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Курс ТР
Mas_Ord_New[Qnt][4]=OrderSwap(); // Номер ордера
Mas_Ord_New[Qnt][5]=OrderStopLoss(); // Количество лотов// Mas_Tip[OrderType()]++; // Кол. ордеров типа
Mas_Ord_New[Qnt][6]=OrderType(); // Тип ордера
Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Магическое число if (OrderComment()=="")
Mas_Ord_New[Qnt][8]=0; // Если нет комментelse
Mas_Ord_New[Qnt][8]=1; // Если есть коммент
Qnt++; // Колич. ордеров//------------------------------------------------------ 6 --
}
}
Mas_Ord_New[0][10]=Qnt; // Колич. ордеров//--------------------------------------------------------------- 7 --return0;
}
// ~~~~~~~~~~~~~~~~~~ Работа с ордерами ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//+----------------------------------------------------------------------------+double NormalizeLot(double lo, bool ro=False, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
//+----------------------------------------------------------------------------+
}
//+--------------------------------------------------------------------+void CreateLabel(string name, string text,int x, int y, color c) //
{ //ObjectCreate(name, OBJ_LABEL,0,0,0); //
ObjectSetText(name,text,FontSize,"Times New Roman",TextColor); //
ObjectSet(name,OBJPROP_CORNER,0
); //
ObjectSet(name,OBJPROP_XDISTANCE,x); //
ObjectSet(name,OBJPROP_YDISTANCE,y); //
ObjectSet(name,OBJPROP_COLOR,c); //
n++; //
} //void DeleteLabel() //
{ //for(int i=ObjectsTotal();i>=0;i--) //
{ //if(StringSubstr(ObjectName(i),0,6)=="Label_") //ObjectDelete(ObjectName(i)); //
} //
} ////+--------------------------------------------------------------------+
Да, я под своим аккаунтом на форум вошел и что это даст вам? Просто удовлетворит любопытство?
Так закрыли бы и все перенаправили на форум mql5. Зачем его кастрировать?
Люди ведь продолжают им пользоваться и общаться, а значит он нужен и функционал его нужно оставить!
А так получается, что как всегда, на пользователей и их мнение наплевали и решили все в одностороннем порядке.
На счет инициализации. Можно ли так писать?
...В общем любимая моя инициализация через ={0} со строками не работает. Вот такая печалька.
Вопрос по МТ4 .
Доброго времени суток. Столкнулся с проблемой определения размера лота. Вот код.
Конкретно на Альпари. Конкретно на USD-JPY. Должен выводить на график данные по ордерам, но .....по доллар-йене не может показать корректное значечие!!! Интересует именно данные из массива !
Что можно предпринять дополнительно ???
Вопрос по МТ4 .
Доброго времени суток. Столкнулся с проблемой определения размера лота. Вот код.
Конкретно на Альпари. Конкретно на USD-JPY. Должен выводить на график данные по ордерам, но .....по доллар-йене не может показать корректное значечие!!! Интересует именно данные из массива !
Что можно предпринять дополнительно ???
Но ведь в учебнике Ковалёва всё же работает. Что мешает скопировать с него правильно и подкорректировать под новые требования?
Я Вас удивлю, но в других ТЦ тоже работает. Если внимательно прочитать с самого начала пост то...
Конкретно на Альпари. Конкретно на USD-JPY.
Что можно предпринять дополнительно ???
Я Вас удивлю, но в других ТЦ тоже работает. Если внимательно прочитать с самого начала пост то...
Конкретно на Альпари. Конкретно на USD-JPY.
Что можно предпринять дополнительно ???
... в других Торговых Центрах? :)
Я видел вашу конкретику. Не стал ковыряться так как считаю всё это избыточным. Все эти терминалы Ковалёва...
Но вот в коде у вас вижу несоответствие сохраняемых данных и описание этих данных в комментариях - уже с толку сбивает.
Далее:
лот у вас распечатывается из переменной a2, а что мы в неё сохраняем? Вот это:
А может вывести нужно через DoubleToString() ?
Да и лот неправильно нормализуете. Нужна функция для нормализации лота. Искать не буду. Можете поискать у Кима - вам подойдёт.
... в других Торговых Центрах? :)
Я видел вашу конкретику. Не стал ковыряться так как считаю всё это избыточным. Все эти терминалы Ковалёва...
Но вот в коде у вас вижу несоответствие сохраняемых данных и описание этих данных в комментариях - уже с толку сбивает.
Далее:
лот у вас распечатывается из переменной a2, а что мы в неё сохраняем? Вот это:
А может вывести нужно через DoubleToString() ?
Да и лот неправильно нормализуете. Нужна функция для нормализации лота. Искать не буду. Можете поискать у Кима - вам подойдёт.
Нашел. Спасибо. Но это не решает поставленную задачу, ибо.
На других ДЦ работает корректно и с таким кодом.
С функцией Кима работает некорректно.
Пишет через DoubleToString() правильно, но считает неправильно. Не буду же я считать через DoubleToString(). Даже если перевести туда и обратно , то пишет стринги нормально а вот дубли из стрингов опять кривые выходят.
Проблема в ДЦ Альпари и нужен скорее костыль что бы обойти эту проблему.
На другой паре USD-SEK некорректно выводит цену открытия.
Но ведь в учебнике Ковалёва всё же работает. Что мешает скопировать с него правильно и подкорректировать под новые требования?
Артем, а что за учебник Ковалева ?
То место, откуда взят был код в сообщении, на которое я отвечал. На mql4.com учебник.