extern double SL=20; // SL для открываемого ордера extern double TP=20; // ТР для открываемого ордера extern double Lot=0.01; // Жестко заданное колич. лотов datetime time; //--------------------------------------------------------------- 2 -- int start() { int Total;
double M_0, M_1;
bool Ans =false, // Ответ сервера после закрытия Cls_B=false, // Критерий для закрытия Buy Cls_S=false, // Критерий для закрытия Sell Opn_B=false, // Критерий для открытия Buy Opn_S=false; // Критерий для открытия Sell
if (Opn_B) {OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}
if (Opn_S) {OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];} }
Советник, открывающий позиции при пересечении OsMA нулевой линии. Непонятно где открывает и непонятно почему. Посмотрите кто-нибудь, может ошибка в iOsMA(NULL,0,13,34,8,0,0)?
Советник, открывающий позиции при пересечении OsMA нулевой линии. Непонятно где открывает и непонятно почему. Посмотрите кто-нибудь, может ошибка в iOsMA(NULL,0,13,34,8,0,0)?
Спасибо за ответ. Набросал простейший советник. Все равно не работает.
в этом коде, посмотри ошибки, функция OrderSend нажатие F1 вызовет справку в стандартном редакторе, посмотри поочередность входящих параметров там ошибка.
+ пользуйся функциями Print / Alert для просмтора значений переменных, вставлять в участок кода после ( назначений / выполнения )
и понмнить про нормализацию для вывода, DoubletoSt..NormalizeDouble..TimeToStr
в аттаче 2 свободых библиотеки с кодом . автор kimIV
код простой, готовые функции, для новичков в самый раз .
10:00:25 Old tick EURUSD30 1.38730/1.38740 10:00:25 Old tick EURUSD240 1.38730/1.38740 10:00:25 Old tick EURUSD1440 1.38730/1.38740 10:00:25 Old tick EURUSD15 1.38730/1.38740 10:00:25 Old tick EURUSD1 1.38730/1.38740 10:00:25 Old tick EURUSD60 1.38730/1.38740 10:00:25 Old tick EURUSD5 1.38730/1.38740 11:00:34 Old tick EURUSD30 1.38847/1.38863 11:00:34 Old tick EURUSD240 1.38847/1.38863 11:00:34 Old tick EURUSD1440 1.38847/1.38863 11:00:34 Old tick EURUSD15 1.38847/1.38863 11:00:34 Old tick EURUSD1 1.38847/1.38863 11:00:34 Old tick EURUSD60 1.38847/1.38863 11:00:34 Old tick EURUSD5 1.38847/1.38863 11:25:06 Old tick EURUSD30 1.38707/1.38722 11:25:06 Old tick EURUSD240 1.38707/1.38722 11:25:06 Old tick EURUSD1440 1.38707/1.38722 11:25:06 Old tick EURUSD15 1.38707/1.38722 11:25:06 Old tick EURUSD1 1.38707/1.38722 11:25:06 Old tick EURUSD60 1.38707/1.38722
extern double TP=20; // ТР для открываемого ордера
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;
double
M_0,
M_1;
bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
//--------------------------------------------------------------- 3 --
// Учёт ордеров
for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;
if(Total!=0 || time==Time[1])return;
// Торговые критерии
M_0=iOsMA(NULL,0,13,34,8,0,0); // 0 бар
M_1=iOsMA(NULL,0,13,34,8,0,1); // 1 бар
if (M_1<0 && M_0>0)
Opn_B=true;
if (M_1>0 && M_0<0)
Opn_S=true;
//--------------------------------------------------------------- 7 --
if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}
if (Opn_S)
{OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];}
}
Тестируешь по всем тикам?
Спасибо за ответ. Набросал простейший советник. Все равно не работает.
в этом коде, посмотри ошибки, функция OrderSend нажатие F1 вызовет справку в стандартном редакторе, посмотри поочередность входящих параметров там ошибка.
+ пользуйся функциями Print / Alert для просмтора значений переменных, вставлять в участок кода после ( назначений / выполнения )
и понмнить про нормализацию для вывода, DoubletoSt..NormalizeDouble..TimeToStr
в аттаче 2 свободых библиотеки с кодом . автор kimIV
код простой, готовые функции, для новичков в самый раз .
// Жестко заданное колич. лотов :)
Да
Тогда у тебя сказывается дребезг на нулевом баре.
Тестируешь по всем тикам?
Как "прекратить" поток неудовольствия ДЦ?
Ниже - выписка из журнала:
10:00:25 Old tick EURUSD30 1.38730/1.38740
10:00:25 Old tick EURUSD240 1.38730/1.38740
10:00:25 Old tick EURUSD1440 1.38730/1.38740
10:00:25 Old tick EURUSD15 1.38730/1.38740
10:00:25 Old tick EURUSD1 1.38730/1.38740
10:00:25 Old tick EURUSD60 1.38730/1.38740
10:00:25 Old tick EURUSD5 1.38730/1.38740
11:00:34 Old tick EURUSD30 1.38847/1.38863
11:00:34 Old tick EURUSD240 1.38847/1.38863
11:00:34 Old tick EURUSD1440 1.38847/1.38863
11:00:34 Old tick EURUSD15 1.38847/1.38863
11:00:34 Old tick EURUSD1 1.38847/1.38863
11:00:34 Old tick EURUSD60 1.38847/1.38863
11:00:34 Old tick EURUSD5 1.38847/1.38863
11:25:06 Old tick EURUSD30 1.38707/1.38722
11:25:06 Old tick EURUSD240 1.38707/1.38722
11:25:06 Old tick EURUSD1440 1.38707/1.38722
11:25:06 Old tick EURUSD15 1.38707/1.38722
11:25:06 Old tick EURUSD1 1.38707/1.38722
11:25:06 Old tick EURUSD60 1.38707/1.38722
Тогда у тебя сказывается дребезг на нулевом баре.
при Тестирование голова болит ?
// Торговые критерии
M_0 ={ iOsMA(0,0,13,34,8,0,1) }; //| 1бар
M_1 ={ iOsMA(0,0,13,34,8,0,2) }; //| 2бар
Opn_B ={ (((M_1<0)==1) &&((M_0>0)==1) ) };
Opn_S ={ (((M_1>0)==1) &&((M_0<0)==1) ) };
пробуй так, задржки, но без дребезга:)