Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
попробуйте вот так
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
Эта конструкция кода позволяет при каждом новом тике пересчитывать индикатор только на нулевом и первом (для проверки) барах,а не пересчитывать уже посчитанный индикатор заново.А мне надо построить индикатор по ВСЕМ ВИДИМЫМ в окне барам,а потом найти его max и min именно на этом участке!Помогите решить проблему,указанную в предыдущем моём посте.Есть пример.Но мне не всё в нём понятно.Кто-нибудь может построчно растолковать эти три строчки?
// обработка видимых баров.
int bars_count=WindowBarsPerChart();
int bar=WindowFirstVisibleBar();
for(int i=0; i<bars_count; i++,bar--)
{
// номера баров уменьшаются, так как нумерация идет в обратном порядке.
// ...
}
MK07: Эта конструкция кода позволяет при каждом новом тике пересчитывать индикатор только на нулевом и первом (для проверки) барах,а не пересчитывать уже посчитанный индикатор заново.А мне надо построить индикатор по ВСЕМ ВИДИМЫМ в окне барам,а потом найти его max и min именно на этом участке!Помогите решить проблему,указанную в предыдущем моём посте.Есть пример.Но мне не всё в нём понятно.Кто-нибудь может построчно растолковать эти три строчки?
Не совсем понятно что вам надо, если вам нужно найти MAX и MIN видимых баров индикатора,сначала рисуем индикатор, а потом ищем.
Может лучше WindowPriceMax(), WindowPriceMin() использовать .
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
если у вас есть вся минутная история, то будет 90%. 99% достигается при самостоятельном создании тиковой истории fxt. Обычно это делают с помощью котировок дукаскопи. Поищите в гугле скрипты по теме 99% качество тестирования
Armen63: Добрый день как в коде советника реализовать условие чтобы однотипные ордера выставлялись через 50 пунктов от последного ордера
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает расстояние в пунктах между рынком и ближайшей |//| позицей |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| op - торговая операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
double d, p;
int i, k=OrdersTotal(), r=1000000;
if (sy=="" || sy=="0") sy=Symbol();
p=MarketInfo(sy, MODE_POINT);
if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderType()==OP_BUY) {
d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
if (r>d) r=NormalizeDouble(d, 0);
}
if (OrderType()==OP_SELL) {
d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
if (r>d) r=NormalizeDouble(d, 0);
}
}
}
}
}
return(r);
}
Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
#property indicator_separate_window #property indicator_buffers 4 #property indicator_color1 Lime #property indicator_color2 Red #property indicator_color3 Aqua #property indicator_color4 DarkOrange #property indicator_width1 2 #property indicator_width3 2 //--- buffers double Macd1Buffer[]; double Signal1Buffer[]; double Macd2Buffer[]; double Signal2Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,Macd1Buffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,Signal1Buffer); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,Macd2Buffer); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,Signal2Buffer); IndicatorDigits(Digits); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Comment(""); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double max1=-0.01,min1=0.01, max2=-0.01,min2=0.01, max_M1=-0.01,min_M1=0.01, max_M2=-0.01,min_M2=0.01, max_S1=-0.01,min_S1=0.01, max_S2=-0.01,min_S2=0.01; int bars_counted=WindowBarsPerChart()-1, limit; limit=bars_counted; //---- macd counted in the 1-st buffer for(int i=0; i<limit; i++) { Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i); Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i); max_M1=MathMax(Macd1Buffer[i],max_M1); min_M1=MathMin(Macd1Buffer[i],min_M1); max_M2=MathMax(Macd2Buffer[i],max_M2); min_M2=MathMin(Macd2Buffer[i],min_M2); } for( i=0; i<limit; i++) { Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i); Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i); max_S1=MathMax(Signal1Buffer[i],max_S1); min_S1=MathMin(Signal1Buffer[i],min_S1); max_S2=MathMax(Signal2Buffer[i],max_S2); min_S2=MathMin(Signal2Buffer[i],min_S2); } max1=MathMax(max_M1,max_S1); min1=MathMin(min_M1,min_S1); //---- done Comment( "\n"," Баров = ",WindowBarsPerChart()-1, "\n"," max_M1 = ",max_M1, "\n"," min_M1 = ",min_M1, "\n"," max_S1 = ",max_S1, "\n"," min_S1 = ",min_S1, "\n"," max_M2 = ",max_M2, "\n"," min_M2 = ",min_M2, "\n"," max_S2 = ",max_S2, "\n"," min_S2 = ",min_S2, "\n"," max1 = ",max1, "\n"," min1 = ",min1, "\n"," max2 = ",max2, "\n"," min2 = ",min2); //---- return(0); } //+------------------------------------------------------------------+Спасибо,уважаемые,за советы.Всё работает,но при установке индикатора он странно рисуется(см.график).Отступ (в барах) от левого края окна графика до вертикальной жёлтой линии всегда ПОСТОЯНЕН при ЛЮБОМ количестве видимых баров в окне и равен восьми барам.Как только эти восемь баров уйдут за левую границу окна,ВСЕ линии графика сразу же появляются и дальше всё идёт нормально.Можно ли это исправить и как?
попробуйте вот так
// обработка видимых баров. int bars_count=WindowBarsPerChart(); int bar=WindowFirstVisibleBar(); for(int i=0; i<bars_count; i++,bar--) { // номера баров уменьшаются, так как нумерация идет в обратном порядке. // ... }Эта конструкция кода позволяет при каждом новом тике пересчитывать индикатор только на нулевом и первом (для проверки) барах,а не пересчитывать уже посчитанный индикатор заново.А мне надо построить индикатор по ВСЕМ ВИДИМЫМ в окне барам,а потом найти его max и min именно на этом участке!Помогите решить проблему,указанную в предыдущем моём посте.Есть пример.Но мне не всё в нём понятно.Кто-нибудь может построчно растолковать эти три строчки?
Не совсем понятно что вам надо, если вам нужно найти MAX и MIN видимых баров индикатора,сначала рисуем индикатор, а потом ищем.
Может лучше WindowPriceMax(), WindowPriceMin() использовать .
Stepan2
Работает
всё-таки еть глюк у массивов, но с while
c for работает без проблем
))
Добрый день.
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
Добрый день.
Люди, подскажите чем тестировать советники. Потому что встроенный в МТ дает в среднем 50% качества моделирования, а на скринах люди выкладывают больше 90%.
если у вас есть вся минутная история, то будет 90%. 99% достигается при самостоятельном создании тиковой истории fxt. Обычно это делают с помощью котировок дукаскопи. Поищите в гугле скрипты по теме 99% качество тестирования
Добрый день как в коде советника реализовать условие чтобы однотипные ордера выставлялись через 50 пунктов от последного ордера