Jump to content
muvingman

Напишу советник, скрипт, индикатор на MQL бесплатно

Recommended Posts

Ugar68
А значит пусть советники работают на текущей паре, нормалайз при умножении int на Point не обязателен, и без антиреквота можно как-нибудь обойтись с макс проскальзыванием 100...

 

Да, вот только если счет ECN, то этот код работать не будет..... :pofig:

Для первой пробы пера потянет. Можно и на Standart опробовать.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
goldman2013

Всё пашет!!:4: Спасибо!! Как добавить условие что б при стоп лоссе позиция переворачивалась???

 

нормалайз при умножении int на Point не обязателен

тоесть можно *Point поудалять из кода?

Share this post


Link to post
Share on other sites
Ugar68
Всё пашет!!:4: Спасибо!! Как добавить условие что б при стоп лоссе позиция переворачивалась???

1. Найти последний закрытый ордер.

2. Если найден, выбрать его и извлечь параметры, а именно тип и прибыль.

3. Если есть параметры и прибыль ордера отрицательная, задать тип открываемого ордера противоположный типу закрытого.

 

int OrdType=OP_BUY;

//Если найден последний исторический ордер

if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

{

//Если прибыль его отрицательная и ордер Buy типа

if(OrderProfit()<0 && OrderType()==OP_BUY)OrdType=OP_SELL;

}

 

Дальше, при открытии указывать тип не OP_BUY, а переменную OrdType

 

тоесть можно *Point поудалять из кода?

Нет, нельзя. Нормализация из другой оперы. Это касается качества работы программы. В приведённых примерах нет никакой нормализации.

Стоит помнить что эти примеры максимально упрощённые, не для реальной торговли. Но для опытов в тестере пойдёт.

Edited by Ugar68

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Melko

Всем привет. Помогите ограничить выставление отлож. стоповых ордеров с одинаковой ценой. Нужна ф-ция, которая после определения цены нового отлож. ордера делала перебор существующих, и если такой цены нету - ставит, если есть – выход. В случае функциональности программы ВОЗНАГРАЖДЕНИЕ ОБЯЗАТЕЛЬНО.

Share this post


Link to post
Share on other sites
Circle
Всем привет. Помогите ограничить выставление отлож. стоповых ордеров с одинаковой ценой. Нужна ф-ция, которая после определения цены нового отлож. ордера делала перебор существующих, и если такой цены нету - ставит, если есть – выход. В случае функциональности программы ВОЗНАГРАЖДЕНИЕ ОБЯЗАТЕЛЬНО.

 

bool YesOrNo(double Price)
{

  int i; 
  for(i=0; i<OrdersTotal(); i++)         
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      {                                   

              if (OrderType() == OP_BUYSTOP || Order_Type() == OP_SELLSTOP) 
              {
                 if NormalizeDouble(OrderOpenPrice(),Digits)== NormalizeDouble(Price,Digits) return(false)
                 ;	                 
              }	              
          }
   } 
return(true);  
}

Функция возвращает true если ордеров BUYSTOP и SELLSTOP по заданной цене Price нет в рынке иначе возвращает false.

Edited by Circle

Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
Melko

Не знаю почему' date=' может это я что-то делаю не правильно. Пример элементарной ф-ции выставления ордеров (Запустить советник и поставить один бай стоп). Проверьте помогите если сможете.[/font']

double Dist=10000.0;

string SMB;

double NewPrice;

int i,z;

int start()

{

RefreshRates();

SMB=Symbol();

{UstanOtlozh();}

}

return(0);

void UstanOtlozh()

{

double OldPrice=WindowPriceOnDropped(); // Здесь брошен скрипт

RefreshRates();

SMB=Symbol();

{

int i=1;

while(i<=OrdersTotal())

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий

{ // Анализ ордеров:

if (OrderSymbol()!= SMB) continue; // Не наш фин.инструм.

int Tip=OrderType(); // Тип ордера

if (Tip<2) continue; // Рыночный ордер

double NewPrice=OrderOpenPrice(); // Цена ордера

{

while(NewPrice<=Ask+100*Point||NewPrice>=Ask+20*Point)

{

NewPrice=NewPrice+20*Point;

for(z=0; z<OrdersTotal(); z++)

{

if(OrderSelect(z, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

{

if (NormalizeDouble(OrderOpenPrice(),Digits)== NormalizeDouble(NewPrice,Digits))

Alert("Ордер с такой ценой уже есть");

break;

}

}

}

OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);

if(NewPrice>Ask+100*Point||NewPrice<Ask+20*Point)

return;

}}}}}}

Share this post


Link to post
Share on other sites
Circle
Не знаю почему, может это я что-то делаю не правильно. Пример элементарной ф-ции выставления ордеров (Запустить советник и поставить один бай стоп). Проверьте помогите если сможете.

double Dist=10000.0;

string SMB;

double NewPrice;

int i,z;

int start()

{

RefreshRates();

SMB=Symbol();

{UstanOtlozh();}

}

return(0);

void UstanOtlozh()

{

double OldPrice=WindowPriceOnDropped(); // Здесь брошен скрипт

RefreshRates();

SMB=Symbol();

{

int i=1;

while(i<=OrdersTotal())

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий

{ // Анализ ордеров:

if (OrderSymbol()!= SMB) continue; // Не наш фин.инструм.

int Tip=OrderType(); // Тип ордера

if (Tip<2) continue; // Рыночный ордер

double NewPrice=OrderOpenPrice(); // Цена ордера

{

while(NewPrice<=Ask+100*Point||NewPrice>=Ask+20*Point)

{

NewPrice=NewPrice+20*Point;

for(z=0; z<OrdersTotal(); z++)

{

if(OrderSelect(z, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

{

if (NormalizeDouble(OrderOpenPrice(),Digits)== NormalizeDouble(NewPrice,Digits))

Alert("Ордер с такой ценой уже есть");

break;

}

}

}

OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);

if(NewPrice>Ask+100*Point||NewPrice<Ask+20*Point)

return;

}}}}}}

 

Судя по вашему коду, ордер выставляется у вас в любом случае.

Надо так - if (YesOrNo(NewPrice))

{

OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE);

} else

{

Alert("Ордер с ценой " + NewPrice+ " уже есть");

}


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
goldman2013

Объясните в двух словах почему во время теста на разных периодах разные результаты?:o Ведь на демо счёте робот у меня одинакова торгует на разных таймфреймах, стратегия торговли робота ну ни каким образом не привязана к тайм фрейму:-k

Share this post


Link to post
Share on other sites
AntFX
Объясните в двух словах почему во время теста на разных периодах разные результаты?:o Ведь на демо счёте робот у меня одинакова торгует на разных таймфреймах, стратегия торговли робота ну ни каким образом не привязана к тайм фрейму:-k

 

Если бы Вы выложили код советника, то можно было бы точно указать, какие его элементы зависят от текущего таймфрейма. А без кода на этот вопрос могут ответить только экстрасенсы.

 

Но для начала убедитесь, что при тестировании Вы указываете одинаковый тестовый спред.


1

Share this post


Link to post
Share on other sites
goldman2013
Если бы Вы выложили код советника, то можно было бы точно указать, какие его элементы зависят от текущего таймфрейма. А без кода на этот вопрос могут ответить только экстрасенсы.

 

Но для начала убедитесь, что при тестировании Вы указываете одинаковый тестовый спред.

 

Спред одинаковый. советник серый. Называется NEWS 17,05

https://forum.alpari.com/showthread.php?t=83242

Вот его параметры

extern int Stoploss = 10, //стоплосс, если 0 то не изменяется

Takeprofit = 50; //тейкпрофит, если 0 то не изменяется

extern int TrailingStop = 10; //длинна тралла, если 0 то нет тралла

extern int TrailingStart = 0; //когда включать тралл, например после достижения 40 п прибыл

extern int StepTrall = 2; //шаг тралла - перемещать стоплосс не ближе чем StepTrall

extern int NoLoss = 0, //перевод в безубыток при заданном кол-ве пунктов прибыли, если 0 то нет перевода в безубыток

MinProfitNoLoss = 0; //минимальная прибыль при переводе вбезубыток

extern int Magic = 77; //магик

extern int Step = 10; //расстояние от цены

extern double Lot = 0.1;

extern int TimeModify = 30; //кол-во секунд раньше которого запрещено изменять ордер

extern int slippage = 30; //Максимально допустимое отклонение цены для рыночных ордеров (ордеров на покупку или продажу).

extern int TimeStart = 0 , //ограничение времени работы советника

TimeEnd = 24; //не открываем ордера и закрываем отложки если время не между TimeStart и TimeEnd

Share this post


Link to post
Share on other sites
AntFX
Спред одинаковый. советник серый. Называется NEWS 17,05

Ну так и спрашивайте причину у его автора. Поскольку исходного кода нет, выяснить причину различия в работе на разных ТФ не представляется возможным.


1

Share this post


Link to post
Share on other sites
AnriAn

Привет' date=' [b']AntFX[/b].

Три недели уж прошло. Дело то двигается с совой?

Обещались за неделю. Может и не ждать больше?

Share this post


Link to post
Share on other sites
AntFX
Привет, AntFX.

Три недели уж прошло. Дело то двигается с совой?

Обещались за неделю. Может и не ждать больше?

 

Вообще-то я не обещал за неделю. Я обещал заняться, как разберусь со всеми делами. К сожалению, так пока и не разобрался...


1

Share this post


Link to post
Share on other sites
Rocker16

Добрый вечер. Могу ли обратиться к Вам за помощью? Нужен робот, который открывает сделки по индикатору MTF Arrow 3.0 в направлении стрелки. Стрелка индикатора начинает мигать еще во время формирования бара, и нужно, чтобы советник открыл сделку при первом появлении стрелки, пускай даже свечка еще не закрылась. Так как таймфрейм пятиминутка, физически просто невозможно за этим уследить, сигналы довольно редкие. ТР 5, СЛ 15. Если же по какой-то причине вы не можете его написать, дайте ответ, пожалуйста.

 

Спасибо!

Share this post


Link to post
Share on other sites
Ugar68
Добрый вечер. Могу ли обратиться к Вам за помощью?

...

Если же по какой-то причине вы не можете его написать, дайте ответ, пожалуйста.

Это к кому обращение и к кому вопрос?

Могучих программистов здесь много бывает. Многие из них могут написать такой советник. Но вот покажется ли кому то идея интересной?

Если даже сам индикатор не выложен.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Novikov

Просьба к программистам, кто может бесплатно написать индикатор! Суть такова:

Индикатор в подвале отображает в виде кривой линии или гистограммы, от 0 и выше, количество открытых ордеров на каждом баре, что бы можно было просмотреть по истории, какое количество максимально и минимально было открыто ордеров на каждом баре.

И еще бы не помешало сделать его MULTI - True/False - все пары/только текущая пара.

Заранее благодарю!


Ковчег строил любитель, а "Титаник" – специалисты.
www.novikov.dp.ua

 

Share this post


Link to post
Share on other sites
kazakov.v
Просьба к программистам, кто может бесплатно написать индикатор! Суть такова:

Индикатор в подвале отображает в виде кривой линии или гистограммы, от 0 и выше, количество открытых ордеров на каждом баре, что бы можно было просмотреть по истории, какое количество максимально и минимально было открыто ордеров на каждом баре.

И еще бы не помешало сделать его MULTI - True/False - все пары/только текущая пара.

Заранее благодарю!

 

 


Никому верить нельзя.

Мне - можно.

 

Share this post


Link to post
Share on other sites
Novikov
[ATTACH]248382[/ATTACH]

 

Спасибо бооольшое!

Но он не корректно отображает информацию!

Не на каждом баре отображается, а на скрине за видимый период времени всегда были открыты ордера, как и сейчас есть открытые, а индикатор ничего не отображает на последних барах! По идее он должан брать информацию из истории закрытых ордеров, а так же информацию из открытых текущих ордеров.

Стоит MULTI - true.

скрин - http://charts.mql5.com/3/331/gbpusd-h1-alpari-limited-2.png

Edited by Novikov

Ковчег строил любитель, а "Титаник" – специалисты.
www.novikov.dp.ua

 

Share this post


Link to post
Share on other sites
kazakov.v

А, ну он смотрит только историю, и только моменты открытия ордеров.

ОК, попозже подправлю.


Никому верить нельзя.

Мне - можно.

 

Share this post


Link to post
Share on other sites
Ugar68
Спасибо бооольшое!

Но он не корректно отображает информацию!

Не на каждом баре отображается, а на скрине за видимый период времени всегда были открыты ордера, как и сейчас есть открытые, а индикатор ничего не отображает на последних барах! По идее он должан брать информацию из истории закрытых ордеров, а так же информацию из открытых текущих ордеров.

Стоит MULTI - true.

скрин - http://charts.mql5.com/3/331/gbpusd-h1-alpari-limited-2.png

Я такой же написал. Он у меня отображает сколько ордеров открывалось на баре. Правда роет как исторические так и открытые ордера.

post-50587-1404220568,0936_thumb.png

Edited by Ugar68

Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Share this post


Link to post
Share on other sites
Novikov
Я такой же написал. Он у меня отображает сколько ордеров открывалось на баре.

[ATTACH]248387[/ATTACH]

 

Наверно надо сделать так, что бы появившийся бар отображался не только на баре открытия, а так же на всех барах до закрытия этого ордера.

Где то так!


Ковчег строил любитель, а "Титаник" – специалисты.
www.novikov.dp.ua

 

Share this post


Link to post
Share on other sites
kazakov.v

 

 

Версия нумбер два.

 

зы дак наверно в таком случае надо не количество ордеров считать, а, например, суммарный лот. Тогда в calc() замени Buff+=1 на Buff+=OrderLots(), ну и IndicatorDigits(2) например.

Edited by kazakov.v

Никому верить нельзя.

Мне - можно.

 

Share this post


Link to post
Share on other sites
Novikov
[ATTACH]248388[/ATTACH]

 

Версия нумбер два.

 

зы дак наверно в таком случае надо не количество ордеров считать, а, например, суммарный лот. Тогда в calc() замени Buff+=1 на Buff+=OrderLots(), ну и IndicatorDigits(2) например.

 

ИМЕННО КОЛИЧЕСТВО ОРДЕРОВ, т.к. суммарный лот не подходит!

Смысл - у некоторых дилеров есть ограничение на количество открытых ордеров! И если советник тестировался у другого дилера, то с помощью индикатора можно просмотреть, зашкаливал эксперт за ограничения у другого дилера или нет!

Спасибо!


Ковчег строил любитель, а "Титаник" – специалисты.
www.novikov.dp.ua

 

Share this post


Link to post
Share on other sites
kazakov.v

Ну, тогда в сомнительны случаях нужно смотреть на меньших ТФ, потому, что, например внутри дня ордер 10 раз открылся и закрылся (не одновременно), то индикатор на Д1 покажет 10.


Никому верить нельзя.

Мне - можно.

 

Share this post


Link to post
Share on other sites
Novikov
Ну, тогда в сомнительны случаях нужно смотреть на меньших ТФ, потому, что, например внутри дня ордер 10 раз открылся и закрылся (не одновременно), то индикатор на Д1 покажет 10.

 

Это тоже не есть гуд!

Если я правильно понял, то если в течении часа было открыто 10 ордеров попеременно, то на H1 будет отображено 10 ордеров, а на M5 или M1 будет на каждом баре по 1 ордеру.

Можно ли сделать так: открывается ордер - бар индикатора во время открытия увеличивается на 1, ордер закрывается - бар индикатора во время закрытия уменьшается на 1, но при этом максимальное значение суммы открытых одновременно ордеров на баре остается. Чтобы не получилось +1-1+1-1+1-1+1-1=0

Или использовать посекундную информацию из ордеров, от открытия до закрытия, и тогда количество будет отображаться на каждом ТМ корректно! Это как прямая от открытия ордера до его закрытия, и эти прямые накладываются друг на друга и получается, как слоеный пирог, а бар отображает количество слоев в этом пироге!

Где то так! Я не программист, объяснил как смог ;)

Edited by Novikov

Ковчег строил любитель, а "Титаник" – специалисты.
www.novikov.dp.ua

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   1 member

    • tim730
×