Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
люди. Помогите пожалуйста. Уже все пальцы истёр. Написал вот такую штуку.
extern int startHour=0;
extern int endHour=10;
extern double PercentSL=100;
extern int FixSL=20;
extern int metodSL=1;//Метод расчета уровня SL - 1-процент от ширины канала;
//...2-фиксированный
extern int metodTP=1;//Метод расчета уровня TP - 1-процент от ширины канала;
//...2-фиксированный
extern int FixTP=100;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
//----------блок параметров нового ордера
double OPB;// цена открытия buy stop
double OPS;// цена открытия sell stop
double SLB;// stopLoss--buy stop
double TPB;// TakeProffit--buy stop
double SLS;// stopLoss--sell stop
double TPS;// TakeProffit--sell stop
datetime Cansel;//время отмены ордеров
//--------------------------------------------------------------------
bool Trade;
double Filter;
double HCannel;
double LCannel;
bool CannelDefined;
//--------------------------------------------------------------- 1 --
// Функция учёта ордеров
// Глобальные переменные:
double Mas_Ord_New[31][9]; // Массив ордеров последний известный
double Mas_Ord_Old[31][9]; // Массив ордеров предыдущий (старый)
// 1й индекс = порядковый номер ордера
// [][0] не определяется
// [][1] курс откр. ордера (абс.знач.курса)
// [][2] StopLoss ордера (абс.знач.курса)
// [][3] TakeProfit ордера (абс.знач.курса)
// [][4] номер ордера
// [][5] колич. лотов орд. (абс.знач.курса)
// [][6] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] магическое число ордера
// [][8] 0/1 факт наличия комментария
int Mas_Tip[6]; // Массив колич. ордеров всех типов
// [] тип орд: 0=B,1=S,2=BL,3=SL,4=BS,5=SS
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----1
Terminal();//проверяем наличие ордеров
if(Mas_Ord_New[0][0]==0)
{Trade=true;// если их нет торговля разрешена
HLCannel();
}
else Trade=false;//если есть торговля запрещена
//----
if ((CannelDefined==true)&& (Trade==true))
NewOrders();
return(0);
}
//==============|| Функция учёта ордеров ||==========================
int Terminal()
{
int Qnt=0; // Счётчик количества ордеров
//--------------------------------------------------------------- 3 --
ArrayCopy(Mas_Ord_Old, Mas_Ord_New);// Сохраняем предыдущую историю
Qnt=0; // Обнуление счётчика ордеров
ArrayInitialize(Mas_Ord_New,0); // Обнуление массива
ArrayInitialize(Mas_Tip, 0); // Обнуление массива
//--------------------------------------------------------------- 4 --
for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам
{
if((OrderSelect(i,SELECT_BY_POS)==true) //Если есть следующ.
&& (OrderSymbol()==Symbol())) //.. и наша вал.пара
{
//------------------------------------------------------ 5 --
Qnt++; // Колич. ордеров
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд
Mas_Ord_New[Qnt][2]=OrderStopLoss(); // Курс SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Курс ТР
Mas_Ord_New[Qnt][4]=OrderTicket(); // Номер ордера
Mas_Ord_New[Qnt][5]=OrderLots(); // Количество лотов
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; // Если есть коммент
//------------------------------------------------------ 6 --
}
}
Mas_Ord_New[0][0]=Qnt; // Колич. ордеров
//--------------------------------------------------------------- 7 --
return;
}
//====================================================================
double HLCannel()
{
int HIndex;//индекс мвксимального бара в канале
int LIndex;// индекс минимального бара в канале
int BarCannel=endHour-startHour;
if(Hour()==endHour+1)
{
HIndex=iHighest(NULL,PERIOD_H1,2,BarCannel,1);
LIndex=iLowest(NULL,PERIOD_H1,1,BarCannel,1);
HCannel=NormalizeDouble (High[HIndex],Digits);
LCannel=NormalizeDouble(Low[LIndex],Digits);
CannelDefined=true;
}else CannelDefined=false; return;
return;
}
//====================================================================
int NewOrders()
{
//11111111111111111111111111111111111111111111111111111111111111
// блок расчета параметров ордера
//+-------------------------------------------------+
//| double OPB;// цена открытия buy stop |
//| double OPS;// цена открытия sell stop |
//| double SLB;// stopLoss--buy stop |
//| double TPB;// TakeProffit--buy stop |
//| double SLS;// stopLoss--sell stop |
//| double TPS;// TakeProffit--sell stop |
//| datetime Cansel;//время отмены ордеров |
//+-------------------------------------------------+
OPB=HCannel;
OPS=LCannel;
//--SLB
if (metodSL==1)//процент от канала
{
double sb=HCannel-((HCannel-LCannel)*(PercentSL/100));
SLB= NormalizeDouble(sb,Digits);
}else if(metodSL==2)//Фиксированный
{
SLB= HCannel-(FixSL*Point);
}else Print("Метод расчета SL не определен");
//--SLS
if (metodSL==1)//процент от канала
{
double ss=LCannel+((HCannel-LCannel)*(PercentSL/100));
SLS=NormalizeDouble(ss,Digits);
}else if(metodSL==2)//Фиксированный
{
SLS= LCannel+(FixSL*Point);
}else Print("Метод расчета SL не определен");
//--TPB
if(metodTP==1)//Процент от канала
{
double tb=HCannel+((HCannel-LCannel)*(PercentSL/100));
TPB= NormalizeDouble(tb,Digits);
}else if(metodTP==2)
{
TPB= HCannel+(FixTP*Point);
}else Print("Метод расчета TP не определен");
//--TPS
if(metodTP==1)//Процент от канала
{
double ts=LCannel-((HCannel-LCannel)*(PercentSL/100));
TPS= NormalizeDouble(ts,Digits);
}else if(metodTP==2)
{
TPS= HCannel-(FixTP*Point);
}else Print("Метод расчета TP не определен");
//--Cansel
//---блок расстановки ордеров
if (Mas_Tip[4]==0)
OrderSend(Symbol(),4,1,OPB,5,SLB,TPB,NULL,0,0,Green);
if (Mas_Tip[5]==0)
OrderSend(Symbol(),5,1,OPS,5,SLS,TPS,NULL,0,0,Red);
return;
}
а теперь никак не могу до думаться как его заставить закрывать все позиции. т.е как отложенные так и рыночные в определенное время. Желательно по переменной extern. заранее спасибо.