Добрый день, продолжаю разбираться с кодингом, взял пример советника из статьи раздела учебник, заменил код из примера:
На произвольный для обучения:
Сделки не выставляются, подскажите пожалуйста в чём причина, как подправить код.
double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен,
// не видно оператора двигающего индекс массива.// лучше пока не освоили работу с массивами обьявите переменные и не парьтесьdouble MA_0=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,0);
double MA_1=iMA(NULL,0,Period_MA,0,MODE_EMA,PRICE_CLOSE,1);
if (MA_1 < MA_0)
{ // ..МА последнего бара выше предыдущего
Opn_B=true; // Критерий откр. Buy
Cls_S=true; // Критерий закр. Sell
}
if (MA_1 > MA_0)
{ // ..МА последнего бара ниже предыдущего
Opn_S=true; // Критерий откр. Sell
Cls_B=true; // Критерий закр. Buy
}
Urain, спасибо, не перестаю удивляться логике mql, а если через for(int i=1; попробовать, скрипт не упроститься - не подскажите, как оформить, не могу ещё логику языка прочувствовать, через что определить оператор двигающий массив?
P. S. Массив я объявлял, по ошибке в скрипте примера удалил:
Abzasc: Разницу в ценах. Как следствие - разные, до противоположного, результаты индикаторов...
чето не вижу я там разного. Забей на индикаторы, еще раз повторяю, для тебя верный тот, на котором ты ведешь торговлю. Ты внимание совсем не на том концентрируешь, что нужно.
extern int n = 20; extern int t3_period = 5; extern double b = 0.618; extern int mBars = 300; extern int Bars.Count = 0; int i,t,c; double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n, AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+ int init() { SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, Buf1); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, Buf2); return(0); } //+------------------------------------------------------------------+ int start() { int limit; if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count; for(int i=0; i<limit; i++) {
Ребяты, подскажите, возможно ли переделать функцию Игоря Кима, которая закрывает все убыточные ордера, убыток которых превысил некоторое значение:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 25.04.2008 |//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |//| превысил некоторое значение |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| pr - профит/убыток |//+----------------------------------------------------------------------------+void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}
Мне необходимо найти одну открытую позицию, имеющую самый большой убыток. Суть в том, что мне нужно далее найти позицию, имеющую профит больше самой убыточной позы и встречно их закрыть. Мож кто уже имеет наработки по данному вопросу иль сталкивался уже с такой проблемой?
почему три индикатора, действующие на разных принципах, показывают почти одинаковую картинку ( спирман, стохастик, и макд-рси) - а показать верное движение и вход с вероятностью выше 60% не могут? или могут?
Все привет! Вот встал вопрос о том, какой код нужен для закрытия ордера, после того как он прошол точку Х в прибыле и начел снижаться до точке Y>OrderOpenPrice, после этого надо закрыть.
Добрый день, продолжаю разбираться с кодингом, взял пример советника из статьи раздела учебник, заменил код из примера:
На произвольный для обучения:
Сделки не выставляются, подскажите пожалуйста в чём причина, как подправить код.Urain, спасибо, не перестаю удивляться логике mql, а если через for(int i=1; попробовать, скрипт не упроститься - не подскажите, как оформить, не могу ещё логику языка прочувствовать, через что определить оператор двигающий массив?
P. S. Массив я объявлял, по ошибке в скрипте примера удалил:
Разницу в ценах. Как следствие - разные, до противоположного, результаты индикаторов...
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
extern int n = 20;
extern int t3_period = 5;
extern double b = 0.618;
extern int mBars = 300;
extern int Bars.Count = 0;
int i,t,c;
double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52,e62;
//+------------------------------------------------------------------+
int init() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Buf1);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, Buf2);
return(0); }
//+------------------------------------------------------------------+
int start() {
int limit;
if (IndicatorCounted()<0) return(-1);
limit=Bars-IndicatorCounted();
if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
for(int i=0; i<limit; i++)
{
b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); n1=t3_period;
if(n1<1) n1=1; n1=1+0.5*(n1-1); w1=2/(n1+1); w2=1-w1;
if(AcBars==0) AcBars=Bars-mBars;
for(c=AcBars; c<=Bars-1; c ++) { i=Bars-1-c; {
if(Close[i]>Close[i+1]) { Ch_p[i]=Close[i]-Close[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; }
else { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=Close[i+1]-Close[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }}
for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; }
k_p=ch_p-cff_n; k_n=ch_n-cff_p;
A1=k_p; e1=w1*A1+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4;
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; Buf1[i]=t3;
A2=k_n; e12=w1*A2+w2*e12; e22=w1*e12+w2*e22; e32=w1*e22+w2*e32; e42=w1*e32+w2*e42;
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32;
AcBars=AcBars+1; ch_p=0; ch_n=0; cff_p=0; cff_n=0; }
}
return(0); }
Подскажите где ошибка не обновляется, историю показывает нормально а online нет
Добрый день. Массив объявил, оператор двигающий индекс массива задал, ордера не выставляются. Подскажите, что не так.
OrderSend попробуйте прописать, тогда всё получиться...
Хелп стандартный в MetaEditore читали? Если нет, прочтите, весь...
Добрый день. Массив объявил, оператор двигающий индекс массива задал, ордера не выставляются. Подскажите, что не так.
Мне необходимо найти одну открытую позицию, имеющую самый большой убыток.
Суть в том, что мне нужно далее найти позицию, имеющую профит больше самой убыточной позы и встречно их закрыть.
Мож кто уже имеет наработки по данному вопросу иль сталкивался уже с такой проблемой?
OrderSend попробуйте прописать, тогда всё получиться...
Хелп стандартный в MetaEditore читали? Если нет, прочтите, весь...
Из детского возраста задавать вопрос не обратившись к хэлпу и яндексу вырос. Сендов море, но позиции не открываются: