GRID_v1.1
GRID_v1.1

GRID_v1.1

更新日期:
2022-10-20
分类标签:
语言:
中文
平台:
没限制

37 人已下载 手机查看

描述文字
GRID_v1.1

//+——————————————————————+
//| Copyright © 2018, forex-time@mail.ru |
//+——————————————————————+
#property copyright “Copyright © 2018, forex-time@mail.ru”
#property strict
//+——————————————————————+
extern double Lot = 0.1;
extern double Martin = 2.0;//Увеличение лота
extern int MaxSpread = 25;//Максимальный спред
extern int TakeProfit = 300;
extern int LossCL = 0;//Закрытие убытка(=0 откл)
extern bool FridayCL = false;//Закрыть всё пятница
extern int Magic = 777;
//+——————————————————————+
int i,SigBuy=-1,SigSell=-1;
bool Work=true,Margin=true,Op=true,OpB=true,OpS=true;
double Pp,lots;
//+——————————————————————+
void init() {
Pp=Point;
if(Pp==0.00001||Pp==0.001) Pp*=10;
return;}
//+——————————————————————+
void deinit() {
Comment(“”);
return;}
//+——————————————————————+
void start() {

if(!IsTradeAllowed()) {Work=false;} else Work=true;

if(Margin){
Comment(“Spread = “+DoubleToStr((Ask-Bid)/Point,0)
+”\n”+”Balance = “+DoubleToStr(AccountBalance(),2)
+”\n”+”Profit = “+ DoubleToStr(Prf(),2));}
//============================================================ OpenOrders ========================================================================|
if(OP()==0) lots=Lot;
if(OP(0)>0) lots=ND(LotsOP(0)*Martin,2);
if(OP(1)>0) lots=ND(LotsOP(1)*Martin,2);
if(lots < MarketInfo(Symbol(),MODE_MINLOT)) lots=MarketInfo(Symbol(), MODE_MINLOT);

double FreeLots;
double bid = MarketInfo(Symbol(),MODE_BID);
double lotsize = MarketInfo(Symbol(),MODE_LOTSIZE);
FreeLots=(bid*lotsize/AccountLeverage()*lots);
if(AccountFreeMargin()<FreeLots && Margin)
{Print(“Trade stop is not enough FreeMargin to begin”);Comment(“Trade stop is not enough FreeMargin to begin”);Margin=false;}
if(!Margin && AccountFreeMargin()>=FreeLots) Margin=true;//После проверки свободной маржи

if(((Ask-Bid)/Point)<=MaxSpread && Hour()>=1 && Work && Margin && Op){
if(OP(0)==0 && OpB) {Send(OP_BUY,lots,Ask,0,ND(Ask+TakeProfit*Point,Digits),Blue);OpB=false;}
if(!BarCL() && OP(0)>0 && OpB) {Send(OP_BUY,lots,Ask,0,0,Blue);OpB=false;}

if(OP(1)==0 && OpS) {Send(OP_SELL,lots,Bid,0,ND(Bid-TakeProfit*Point,Digits),Red);OpS=false;}
if(!BarCL() && OP(1)>0 && OpS) {Send(OP_SELL,lots,Bid,0,0,Red);OpS=false;}}

if(BarCL() && OP()==0) Op=true;
if(BarOp()) {OpB=true;OpS=true;}
//=========================================================== CloseOrders ========================================================================|
if((Prf()>0 && OP()>0)||(FridayCL && DayOfWeek()==5 && Hour()>=22)||(LossCL!=0 && Prf()<=-LossCL && OP()>0)){Op=false;
for(i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
if(OrderType()<2) CloseOrd(OrderTicket());}}
//—————–+
}// Start END |
//—————–+
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//+——————————————————————+
//|ND – нормализация числа |
//——————————————————————-+
double ND(double value, int digits) {
return(NormalizeDouble(value, digits));}
//+——————————————————————+
//| Подсчет открытых ордеров по типу |
//+——————————————————————+
int OP(int type=-1){
int count=0;
for(i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()==type || (OrderType()>=0 && type==-1)) count++;}
return(count);}
//+——————————————————————+
//| Лоты открытых ордеров по типу |
//+——————————————————————+
double LotsOP(int type=-1){
double lt=0.0;
for(i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()==type || (OrderType()>=0 && type==-1)) lt+=OrderLots();}
return(lt);}
//+——————————————————————+
//| Одно действие на одном баре после открытия |
//+——————————————————————+
int BarOp(){
datetime t=0;
for(i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(t<OrderOpenTime())t=OrderOpenTime();}
return(iBarShift(Symbol(),0,t,true));}
//+——————————————————————+
//| Одно действие на одном баре после закрытия |
//+——————————————————————+
bool BarCL(){
datetime t=0;
for(i=OrdersHistoryTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(t<OrderCloseTime())t=OrderCloseTime();}
return(iBarShift(Symbol(),0,t,true));}
//+——————————————————————+
//| Профит всех ордеров по типу |
//+——————————————————————+
double Prf(int type=-1){
double pr=0.0;
for(i=OrdersTotal()-1;i>=0;i–)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
if(OrderType()>1 || type>1) continue;
if(OrderType()==type || (OrderType()>=0 && type==-1)) pr+=OrderProfit()+OrderCommission()+OrderSwap();}
return(pr);}
//+—————————————————–+
//| Открытие, закрытие ордеров |
//+—————————————————–+
void Send(int type, double lt, double price, double sl, double tp, color col){
int send=0;
send=OrderSend(Symbol(),type,lt,price,10,sl,tp,”GRID “+TypeToStr(type),Magic,0,col);
if (send>0) {
Print(“Успешно открыт ордер “+TypeToStr(type),”, StopLoss: “+(string)sl,”, TakeProfit: “+(string)tp,”, Тикет: “+(string)send,”, Магик: “+(string)Magic);
} else {
Print(“Невозможно открыть ордер “+TypeToStr(type),”. Ошибка: “+Fun_Error(GetLastError()));}
return;}
//———————–+
void CloseOrd(int ticket){
color cls=Gray;
for(i=0;i<OrdersTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderType()<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY) cls=DeepSkyBlue;
if(OrderType()==OP_SELL) cls=Magenta;}
if(!OrderSelect(ticket,SELECT_BY_TICKET)||OrderCloseTime()>0) return;
if(!OrderClose(ticket,OrderLots(),OrderClosePrice(),30,cls)) Print(Fun_Error(GetLastError()));}
//+———————————————————-+
string TypeToStr(int type) {
switch(type) {
case 0: return(“BUY”);
case 1: return(“SELL”);
case 2: return(“BUYLIMIT”);
case 3: return(“SELLLIMIT”);
case 4: return(“BUYSTOP”);
case 5: return(“SELLSTOP”);
}
return(“NONE”);}
//+———————————————————-+
//| Функция обработки ошибок |
//+———————————————————-+
string Fun_Error(int error_code){
string error_string;
switch(error_code){
case 0: error_string=”Нет ошибок”; break;
case 1: error_string=”Нет ошибки, но результат неизвестен”; break;
case 2: error_string=”Общая ошибка”; break;
case 3: error_string=”Неправильные параметры”; break;
case 4: error_string=”Торговый сервер занят”; break;
case 5: error_string=”Старая версия клиентского терминала”; break;
case 6: error_string=”Нет связи с торговым сервером”; break;
case 7: error_string=”Недостаточно прав”; break;
case 8: error_string=”Слишком частые запросы”; break;
case 9: error_string=”Недопустимая операция нарушающая функционирование сервера”; break;
case 64: error_string=”Счет заблокирован”; break;
case 65: error_string=”Неправильный номер счета”; break;
case 128: error_string=”Истек срок ожидания совершения сделки”; break;
case 129: error_string=”Неправильная цена”; break;
case 130: error_string=”Неправильные стопы”; break;
case 131: error_string=”Неправильный объем”; break;
case 132: error_string=”Рынок закрыт”; break;
case 133: error_string=”Торговля запрещена”; break;
case 134: error_string=”Недостаточно денег для совершения операции”; break;
case 135: error_string=”Цена изменилась”; break;
case 136: error_string=”Нет цен”; break;
case 137: error_string=”Брокер занят”; break;
case 138: error_string=”Новые цены”; break;
case 139: error_string=”Ордер заблокирован и уже обрабатывается”; break;
case 140: error_string=”Разрешена только покупка”; break;
case 141: error_string=”Слишком много запросов”; break;
case 145: error_string=”Модификация запрещена, так как ордер слишком близок к рынку”; break;
case 146: error_string=”Подсистема торговли занята”; break;
case 147: error_string=”Использование даты истечения ордера запрещено брокером”; break;
case 148: error_string=”Количество открытых и отложенных ордеров достигло предела, установленного брокером.”; break;
case 4000: error_string=”Нет ошибки”; break;
case 4001: error_string=”Неправильный указатель функции”; break;
case 4002: error_string=”Индекс массива – вне диапазона”; break;
case 4003: error_string=”Нет памяти для стека функций”; break;
case 4004: error_string=”Переполнение стека после рекурсивного вызова”; break;
case 4005: error_string=”На стеке нет памяти для передачи параметров”; break;
case 4006: error_string=”Нет памяти для строкового параметра”; break;
case 4007: error_string=”Нет памяти для временной строки”; break;
case 4008: error_string=”Неинициализированная строка”; break;
case 4009: error_string=”Неинициализированная строка в массиве”; break;
case 4010: error_string=”Нет памяти для строкового массива”; break;
case 4011: error_string=”Слишком длинная строка”; break;
case 4012: error_string=”Остаток от деления на ноль”; break;
case 4013: error_string=”Деление на ноль”; break;
case 4014: error_string=”Неизвестная команда”; break;
case 4015: error_string=”Неправильный переход”; break;
case 4016: error_string=”Неинициализированный массив”; break;
case 4017: error_string=”Вызовы DLL не разрешены”; break;
case 4018: error_string=”Невозможно загрузить библиотеку”; break;
case 4019: error_string=”Невозможно вызвать функцию”; break;
case 4020: error_string=”Вызовы внешних библиотечных функций не разрешены”; break;
case 4021: error_string=”Недостаточно памяти для строки, возвращаемой из функции”; break;
case 4022: error_string=”Система занята”; break;
case 4050: error_string=”Неправильное количество параметров функции”; break;
case 4051: error_string=”Недопустимое значение параметра функции”; break;
case 4052: error_string=”Внутренняя ошибка строковой функции”; break;
case 4053: error_string=”Ошибка массива”; break;
case 4054: error_string=”Неправильное использование массива-таймсерии”; break;
case 4055: error_string=”Ошибка пользовательского индикатора”; break;
case 4056: error_string=”Массивы несовместимы”; break;
case 4057: error_string=”Ошибка обработки глобальныех переменных”; break;
case 4058: error_string=”Глобальная переменная не обнаружена”; break;
case 4059: error_string=”Функция не разрешена в тестовом режиме”; break;
case 4060: error_string=”Функция не разрешена”; break;
case 4061: error_string=”Ошибка отправки почты”; break;
case 4062: error_string=”Ожидается параметр типа string”; break;
case 4063: error_string=”Ожидается параметр типа integer”; break;
case 4064: error_string=”Ожидается параметр типа double”; break;
case 4065: error_string=”В качестве параметра ожидается массив”; break;
case 4066: error_string=”Запрошенные исторические данные в состоянии обновления”; break;
case 4067: error_string=”Ошибка при выполнении торговой операции”; break;
case 4099: error_string=”Конец файла”; break;
case 4100: error_string=”Ошибка при работе с файлом”; break;
case 4101: error_string=”Неправильное имя файла”; break;
case 4102: error_string=”Слишком много открытых файлов”; break;
case 4103: error_string=”Невозможно открыть файл”; break;
case 4104: error_string=”Несовместимый режим доступа к файлу”; break;
case 4105: error_string=”Ни один ордер не выбран”; break;
case 4106: error_string=”Неизвестный символ”; break;
case 4107: error_string=”Неправильный параметр цены для торговой функции”; break;
case 4108: error_string=”Неверный номер тикета”; break;
case 4109: error_string=”Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.”; break;
case 4110: error_string=”Длинные позиции не разрешены. Необходимо проверить свойства эксперта.”; break;
case 4111: error_string=”Короткие позиции не разрешены. Необходимо проверить свойства эксперта.”; break;
case 4200: error_string=”Объект уже существует”; break;
case 4201: error_string=”Запрошено неизвестное свойство объекта”; break;
case 4202: error_string=”Объект не существует”; break;
case 4203: error_string=”Неизвестный тип объекта”; break;
case 4204: error_string=”Нет имени объекта”; break;
case 4205: error_string=”Ошибка координат объекта”; break;
case 4206: error_string=”Не найдено указанное подокно”; break;
default: error_string=”Ошибка при работе с объектом”;
}
return(error_string);}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< END >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>|

如果你对文件有了解,请帮助投票!

If you are familiar with the file, please help vote!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位投票人。

相关资源

暂无评论

none
暂无评论...