Отличный советник, работаю пока на демо. Проблема заключается в том, что в 00:00 при переходе на следущую дату брокер закррывает позиции, а затем снова их открывает по цене, отличной от первичной цены. Когда это происходит, советник не распознает свои открытые ордера и генерирует дополнительные, которые "по его мнению" отсутствуют. я думаю, можно сделать чтобы советник определял имеющиеся ордера по TakeProfit , а не по цене открытия. хотя на ваше усмотрение. помогите плиз.
//+------------------------------------------------------------------+
//| Net_builder_v13.1.mq4 |
//| Copyright © 2007, ASL |
//| http://www.listforex.info |
//| Советник расставляет сетку ордеров выбранного типа и объёмов, |
//| шагом step. Применяется функция трейлинг стоп (выключается). | |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, ASL"
#property link "http://www.listforex.info"
// размеры ордеров
// если не надо открывать ордера - указать размер 0 (ноль)
extern double bl_lots=0; // размер buylimit
extern double sl_lots=0; // размер selllimit
extern double bs_lots=0.1; // размер buystop
extern double ss_lots=0.1; // размер sellstop
// для buylimit
extern int bl_tp=20; // Предполагаемый профит в пунктах
extern int bl_sl=0; // Стоплосс для ограничения убытков, если не надо - bl_sl=0
// для selllimit
extern int sl_tp=20;
extern int sl_sl=0;
// для buystop
extern int bs_tp=32;
extern int bs_sl=0;
// для sellstop
extern int ss_tp=32;
extern int ss_sl=0;
// число пунктов для функции "трейлинг стоп". Если тралить не надо - trailing=0
extern int trailing=0;
// шаг сетки
extern int step=40;
// смещение, до которого открываются ордера
extern int offset=50;
// 0 - на графике стрелки не отображаются; 1 - отображаются: бай - зелёные, селл - красные
extern int label=0;
int global_flag=0;
#import "stdlib.ex4"
string ErrorDescription(int);
#import
int start()
{
int cnt, flag, i, ticket, tp;
double my_tp, my_sl, my_ask, down_price, up_price, my_bid;
int stop_level=MarketInfo(Symbol(), MODE_STOPLEVEL);
bool result;
int total,total_buy=0, total_sell=0;
double all_buy=0, all_sell=0;
total=OrdersTotal();
switch (global_flag)
{ // switch global_flag
case 0:
// ########### Проверка коррекности введенных параметров ##################################
flag=1;
if (bl_sl!=0 && bl_sl < stop_level)
{Alert ("Некорректный уровень stoploss для ордеров buylimit"); flag=0;}
if (sl_sl!=0 && sl_sl < stop_level)
{Alert ("Некорректный уровень stoploss для ордеров selllimit"); flag=0;}
if (bs_sl!=0 && bs_sl< stop_level)
{Alert ("Некорректный уровень stoploss для ордеров buystop"); flag=0;}
if (ss_sl!=0 && ss_sl < stop_level)
{Alert ("Некорректный уровень stoploss для ордеров sellstop"); flag=0;}
if (trailing!=0 && trailing < stop_level)
{Alert ("Некорректный уровень tailing"); flag=0;}
if (offset < step)
{Alert ("Некорректные параметры: offset < step"); flag=0;}
if (offset==0 && (bl_tp<stop_level || sl_tp<stop_level || bs_tp<stop_level || ss_tp<stop_level))
{Alert ("Некорректные параметры: при trailing=0 уровни профита > ",stop_level); flag=0;}
if (flag==1) global_flag=1;
break;
case 1:
// #################################### BUYLIMIT #########################################
if (bl_lots!=0)
{// if(bl_lots!=0)
down_price=Ask-MathPow(0.1,Digits)*10;
for (i=down_price*MathPow(10,Digits); i>((down_price*MathPow(10,Digits))-offset); i--)
{
if (MathMod(i,step)==0)
{
my_ask=StrToDouble(DoubleToStr(i/MathPow(10,Digits), Digits));
// проверяем, есть ли открытая позиция или отложенный ордер
flag=1;
for (cnt=0; cnt<total; cnt++) // Перебор всех ордеров
{
if(OrderSelect(cnt, SELECT_BY_POS)==true)
{
if (my_ask==OrderOpenPrice()&& OrderSymbol()==Symbol() && (OrderType()==0 || OrderType()==2))
{
flag=flag*0;
}
}
else
{
Comment("OrderSelect() [2] вернул ошибку - ",ErrorDescription(GetLastError()));
}
}
if (flag==1)
{
if(trailing==0) my_tp=my_ask+bl_tp/MathPow(10,Digits); else my_tp=0;
if(bl_sl!=0) my_sl=my_ask-bl_sl/MathPow(10,Digits); else my_sl=0;
switch (label)
{
case 0:
ticket=OrderSend(Symbol(),OP_BUYLIMIT,bl_lots,my_ask,0,my_sl,my_tp,"NB_v13.1-bl",6346341,0,CLR_NONE);
break;
case 1:
ticket=OrderSend(Symbol(),OP_BUYLIMIT,bl_lots,my_ask,0,my_sl,my_tp,"NB_v13.1-bl",6346341,0,"green");
break;
}
if(ticket<0)
{
Comment("OrderSend (BUYLIMIT) вернул ошибку # ",ErrorDescription(GetLastError()) );
return(0);
}
break;
}
}
}
}// if(bl_lots=!0)
global_flag=2;
break;
case 2:
// #################################### SELLLIMIT ##########################################
if (sl_lots!=0)
{// if(sl_lots!=0)
up_price=Bid+MathPow(0.1,Digits)*10;
for (i=up_price*MathPow(10,Digits); i<((up_price*MathPow(10,Digits))+offset); i++)
{
if (MathMod(i,step)==0)
{
my_bid=StrToDouble(DoubleToStr(i/MathPow(10,Digits), Digits));
// проверяем, есть ли открытая позиция или отложенный ордер
flag=1;
for (cnt=0; cnt<total; cnt++) // Перебор всех ордеров
{
if(OrderSelect(cnt, SELECT_BY_POS)==true)
{
if (my_bid==OrderOpenPrice()&& OrderSymbol()==Symbol() && (OrderType()==1 || OrderType()==3))
{
flag=flag*0;
}
}
else
{
Comment("OrderSelect() [2] вернул ошибку - ",ErrorDescription(GetLastError()));
}
}
if (flag==1)
{
if(trailing==0) my_tp=my_bid-sl_tp/MathPow(10,Digits); else my_tp=0;
if(sl_sl!=0) my_sl=my_bid+sl_sl/MathPow(10,Digits); else my_sl=0;
switch (label)
{
case 0:
ticket=OrderSend(Symbol(),OP_SELLLIMIT,sl_lots,my_bid,0,my_sl,my_tp,"NB_v13.1-sl",6346343,0,CLR_NONE);
break;
case 1:
ticket=OrderSend(Symbol(),OP_SELLLIMIT,sl_lots,my_bid,0,my_sl,my_tp,"NB_v13.1-sl",6346343,0,"red");
break;
}
if(ticket<0)
{
Comment("OrderSend (SELLLIMIT) вернул ошибку # ",ErrorDescription(GetLastError()) );
return(0);
}
break;
}
}
}
} // if(sl_lots!=0)
global_flag=3;
break;
case 3:
// #################################### BUYSTOP ############################################
if (bs_lots!=0)
{// if(sl_lots!=0)
up_price=Ask+MathPow(0.1,Digits)*10;
for (i=up_price*MathPow(10,Digits); i<((up_price*MathPow(10,Digits))+offset); i++)
{
if (MathMod(i,step)==0)
{
my_ask=StrToDouble(DoubleToStr(i/MathPow(10,Digits), Digits));
// проверяем, есть ли открытая позиция или отложенный ордер
flag=1;
for (cnt=0; cnt<total; cnt++) // Перебор всех ордеров
{
if(OrderSelect(cnt, SELECT_BY_POS)==true)
{
if (my_ask==OrderOpenPrice()&& OrderSymbol()==Symbol() && (OrderType()==0 || OrderType()==4))
{
flag=flag*0;
}
}
else
{
Comment("OrderSelect() [2] вернул ошибку - ",ErrorDescription(GetLastError()));
}
}
if (flag==1)
{
if(trailing==0) my_tp=my_ask+bs_tp/MathPow(10,Digits); else my_tp=0;
if(bs_sl!=0) my_sl=my_ask-bs_sl/MathPow(10,Digits); else my_sl=0;
switch (label)
{
case 0:
ticket=OrderSend(Symbol(),OP_BUYSTOP,bs_lots,my_ask,0,my_sl,my_tp,"NB_v13.1-bs",6346343,0,CLR_NONE);
break;
case 1:
ticket=OrderSend(Symbol(),OP_BUYSTOP,bs_lots,my_ask,0,my_sl,my_tp,"NB_v13.1-bs",6346343,0,"green");
break;
}
if(ticket<0)
{
Comment("OrderSend (SELLLIMIT) вернул ошибку # ",ErrorDescription(GetLastError()) );
return(0);
}
break;
}
}
}
} // if(bs_lots!=0)
global_flag=4;
break;
case 4:
// #################################### SELLLSTOP ##########################################
if (ss_lots!=0)
{// if(ss_lots!=0)
down_price=Bid-MathPow(0.1,Digits)*10;
for (i=down_price*MathPow(10,Digits); i>((down_price*MathPow(10,Digits))-offset); i--)
{
if (MathMod(i,step)==0)
{
my_bid=StrToDouble(DoubleToStr(i/MathPow(10,Digits), Digits));
// проверяем, есть ли открытая позиция или отложенный ордер
flag=1;
for (cnt=0; cnt<total; cnt++) // Перебор всех ордеров
{
if(OrderSelect(cnt, SELECT_BY_POS)==true)
{
if (my_bid==OrderOpenPrice()&& OrderSymbol()==Symbol() && (OrderType()==1 || OrderType()==5))
{
flag=flag*0;
}
}
else
{
Comment("OrderSelect() [2] вернул ошибку - ",ErrorDescription(GetLastError()));
}
}
if (flag==1)
{
if(trailing==0) my_tp=my_bid-ss_tp/MathPow(10,Digits); else my_tp=0;
if(ss_sl!=0) my_sl=my_bid+ss_sl/MathPow(10,Digits); else my_sl=0;
switch (label)
{
case 0:
ticket=OrderSend(Symbol(),OP_SELLSTOP,ss_lots,my_bid,0,my_sl,my_tp,"NB_v13.1-ss",6346341,0,CLR_NONE);
break;
case 1:
ticket=OrderSend(Symbol(),OP_SELLSTOP,ss_lots,my_bid,0,my_sl,my_tp,"NB_v13.1-ss",6346341,0,"red");
break;
}
if(ticket<0)
{
Comment("OrderSend (SELLSTOP) вернул ошибку # ",ErrorDescription(GetLastError()) );
return(0);
}
break;
}
}
}
}// if(ss_lots=!0)
if (trailing!=0) global_flag=5; else global_flag=1;
break;
case 5:
// ######################### Трейлинг Стоп ################################################
// Начало #################################################################################
for (cnt=0; cnt<total; cnt++) // Перебор всех ордеров
{
if(OrderSelect(cnt, SELECT_BY_POS)==true)
{
tp=10;
if (OrderComment()=="NB_v13.1-bl") tp=bl_tp;
if (OrderComment()=="NB_v13.1-sl") tp=sl_tp;
if (OrderComment()=="NB_v13.1-bs") tp=bs_tp;
if (OrderComment()=="NB_v13.1-ss") tp=ss_tp;
if (OrderType()==0 && OrderSymbol()==Symbol())
{
my_sl=Bid-trailing/MathPow(10,Digits);
if ((OrderStopLoss() < my_sl || OrderStopLoss()==0) && OrderOpenPrice()<Bid-tp/MathPow(10,Digits)-trailing/MathPow(10,Digits) )
{
my_tp=Bid+tp/MathPow(10,Digits);
switch (label)
{
case 0:
result=OrderModify(OrderTicket(),OrderOpenPrice(), my_sl, my_tp, 0, CLR_NONE);
break;
case 1:
result=OrderModify(OrderTicket(),OrderOpenPrice(), my_sl, my_tp, 0, "Blue");
break;
}
//if(result==false) Alert("OrderModify() [1] вернул ошибку - ",ErrorDescription(GetLastError())," ",Ask," ",my_sl," ", my_tp);
}
}
else
{
if (OrderType()==1 && OrderSymbol()==Symbol() )
{
my_sl=Ask+trailing/MathPow(10,Digits);
if ((OrderStopLoss() > my_sl || OrderStopLoss()==0) && OrderOpenPrice()>Ask+tp/MathPow(10,Digits)+trailing/MathPow(10,Digits))
{
my_tp=Ask-tp/MathPow(10,Digits);
switch (label)
{
case 0:
result=OrderModify(OrderTicket(),OrderOpenPrice(), my_sl, my_tp, 0, CLR_NONE);
break;
case 1:
result=OrderModify(OrderTicket(),OrderOpenPrice(), my_sl, my_tp, 0, "Blue");
break;
}
}
}
}
}
else
{
Comment("OrderSelect() [2] вернул ошибку - ",ErrorDescription(GetLastError()));
}
}
// Конец #################################################################################
global_flag=1;
break;
} // switch global_flag
return(0);
}
Привет помоги пожалуйста написать советника. Я в этом не бум бум но мне кажиться это хорошая идея. Смысл идеи в следующем если это конечно возможно.
Надо что бы открывались две ставки одновременно одна Sell одна Buy с параметрами (lots=0.1____TafeProfit=30______StopLoss=10) и при закрытии убыточной открывалась вторая положительная с параметрами (lots=1____TafeProfit=30______StopLoss=10)
И если ты дружище меня сразу на ху… не пошлёш то в идеале что бы две первоначальные ставки открывались на миниуме или на максимуме свечке или при появлении новой свечке, но если вторую часть писать долго сделай хоть только первую часть моего бреда
Заранее большое спасибо !!!! Если напишишь закинь сюда vms.80@mail.ru
посмотри здесь https://www.mql5.com/ru/code/8074
Отличный советник, работаю пока на демо. Проблема заключается в том, что в 00:00 при переходе на следущую дату брокер закррывает позиции, а затем снова их открывает по цене, отличной от первичной цены. Когда это происходит, советник не распознает свои открытые ордера и генерирует дополнительные, которые "по его мнению" отсутствуют. я думаю, можно сделать чтобы советник определял имеющиеся ордера по TakeProfit, а не по цене открытия. хотя на ваше усмотрение. помогите плиз.
Работал я на реале у такого брокера! который ночью позы закрывал и отрывал их вновь по новой цене!
УШЕЛ
потому что - долгосрочкой работать невозможно у такого брокера
если я хочу переждать коррекцию до следующего рывка по тренду ОЧЕНЬ НЕУДОБНО ЭТО
кроме того пары по которым имеется положительный своп по направлению движения БРОКЕР пересчитает
( в тот день когда день закроетеся против позы ) себе в плюс а мне в минус
нормальный брокер насчитает в такой день своп плюсом мне
но сама проблема еще и в том что переоткрывая позы БРОКЕР не копирует магик номера! и коментарии к которым можно привязать советника
---а значит нарушается логика не тольтко в трейдинге - но и логика работы программ
нарушается целостность первичной информации которую я заложил в ОРДЕР
МАГИГ и КОММЕНТАРИЙ
мучаться с обходом этих проблем ? зачем когда ЕСТЬ НОРМАЛЬНЫЕ БРОКЕРЫ
---
лично я бы поменял бы брокера
Отличный советник, работаю пока на демо. Проблема заключается в том, что ...
Это "отличный советник"? Это самый тупой гридер, что появлялся на этом форуме. Выкинь его и забудь... А лучше запомни хорошенько - так советник работать не должен.
Проблема заключается в том, что он в принципе не способен зарабатывать. Это заложено в него генетически. В лучшем случае это гарантированный слив по спреду и свопам, в худшем тебе не придётся долго мучаться. Есть ещё более оптимистичный сценарий - ДЦ его забанит раньше, чем будет слит весь депозит.
Отличный советник, работаю пока на демо. Проблема заключается в том, что ...
Это "отличный советник"? Это самый тупой гридер, что появлялся на этом форуме. Выкинь его и забудь... А лучше запомни хорошенько - так советник работать не должен.
Проблема заключается в том, что он в принципе не способен зарабатывать. Это заложено в него генетически. В лучшем случае это гарантированный слив по спреду и свопам, в худшем тебе не придётся долго мучаться. Есть ещё более оптимистичный сценарий - ДЦ его забанит раньше, чем будет слит весь депозит.
В данный момент показывает прибыль на демо 20-30 % от депо в неделю. пара GBP/JPY. Нужно правильно настроить чтобы не забанили. offset например в пределах разумного.
В данный момент показывает прибыль на демо 20-30 % от депо в неделю. пара GBP/JPY. Нужно правильно настроить чтобы не забанили. offset например в пределах разумного.
"Имеющий уши да услышит, имеющий глаза да увидит..." Остальным я пожелаю удачи.
"Имеющий уши да услышит, имеющий глаза да увидит..." Остальным я пожелаю удачи.
А сам???
А сам???
если бы все всё умели, тогда и форумов бы небыло
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Отличный советник, работаю пока на демо. Проблема заключается в том, что в 00:00 при переходе на следущую дату брокер закррывает позиции, а затем снова их открывает по цене, отличной от первичной цены. Когда это происходит, советник не распознает свои открытые ордера и генерирует дополнительные, которые "по его мнению" отсутствуют. я думаю, можно сделать чтобы советник определял имеющиеся ордера по TakeProfit , а не по цене открытия. хотя на ваше усмотрение. помогите плиз.