Держи.
Доработка советников: общая тема📌
От Garfik, 4 августа, 2011 в Уголок Программиста
Добрый день товарищи , кто напишет советник, на основе индикаторов, стратегия рабочая, куплена за деньги, хотелось бы по ней советника. Кто сможет, отзовись в личку, там будут подробности, за ранее спасибо!
Дело было так написал я советник на mq4 он никак не хотел отложки открывать начал дебагать после в
коде
void OnTick()
{
Print("Ошибка №", GetLastError(), ", стоплевел = ", MarketInfo(Symbol(), MODE_STOPLEVEL), ", спрэд = ", MarketInfo(Symbol(), MODE_SPREAD));
}
Показал ошибки исправил потом не показал ни каких ошибок начал тестировать показал хороший результат в тестере но иногда в тестере показывает ошибку 130 и я её исправил проблема была с стопами в журнале ошибок нет но вот на демо счёте тишина ничего не работает брокер рофорекс ecn узкий спред да ещё кое что сам я начинающий программист если это можно так сказать до этого прочёл несколько статей про то почему совы не могут или не хотят работать первое появление нового бара отлавливаю пробовал ставить вот так и так нулевой результат
bool NewBarB(int TF=0)
{
static datetime NewTime=0;
if(NewTime!=iTime(Symbol(),TF,0))
{
NewTime=iTime(Symbol(),TF,0);
return(true);
}
return(false);
}
////////////////и так
void OnTick()
{
static datetime dtBarCurrent=WRONG_VALUE;
datetime dtBarPrevious=dtBarCurrent;
dtBarCurrent=(datetime) SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
bool NewBarFlag=(dtBarCurrent!=dtBarPrevious);
if (NewBarFlag)
{
}
///////и так
if (Volume[0] > 1) return;
Смайли всегда :cheesy: А на Сервис настройка Советники галка стоит на автоторговле
прошу помочь.
Ладно, давай запускать сову.
После объявления функции ОнТик() поставь принт - посмотри приходят-ли тики сове.
Ошибок нет но ордера не открываются что делать не знаю помогите не оставляйте в трудную минуту fcplm
Ошибок нет но ордера не открываются что делать не знаю помогите не оставляйте в трудную минуту fcplm
Перечитал 3 раза, так ничего и не понял. Как минимум нужно кинуть сюда код, чтобы свободный программист посмотрел его.
Ошибок нет но ордера не открываются что делать не знаю помогите не оставляйте в трудную минуту
А вы не могли бы побольше кода выложить, увидел только попытку определения нового бара, а самой функции открытия отложек не видно.
Вот код открытия ордера что не так не пойму ордера не открываются.
На тестере всё хорошо ордера открываются без ошибок но на демо счёте нет никаких ошибок и ордера не открываются тишина.
input int Magik=1461919;
extern double LotSize=0.1;
extern double StopLoss=20;
extern double TakeProfit=30;
extern int Slippage=5;
double pips;
int OnInit()
{
double ticksize=MarketInfo(Symbol(),MODE_TICKSIZE);
if(ticksize==0.00001 || ticksize==0.001)
pips=ticksize*10;
else pips=ticksize;
return(INIT_SUCCEEDED);
}
double LotsOptimized()
{
double lot=LotSize;
int orders=OrdersHistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//--- select lot size
if(MaximumRisk>0)
{
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
}
//--- calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print("Error in history!");
break;
}
if(OrderSymbol()!=Symbol() /*|| OrderType()>OP_SELL*/)
continue;
//---
if(OrderProfit()>0) break;
if(OrderProfit() }
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- minimal allowed volume for trade operations
double minlot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(lot { lot=minlot; }
// Print("Volume is less than the minimal allowed ,we use",minlot);}
// lot=minlot;
//--- maximal allowed volume of trade operations
double maxlot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
if(lot>maxlot)
{ lot=maxlot; }
// Print("Volume is greater than the maximal allowed,we use",maxlot);}
// lot=maxlot;
//--- get minimal step of volume changing
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(lot/volume_step);
if(MathAbs(ratio*volume_step-lot)>0.0000001)
{ lot=ratio*volume_step;}
return(lot);
/* else Print("StopOut level Not enough money for ",OP_SELL," ",lot," ",Symbol());
return(0);*/
}
double NDTP(double val)
{
// RefreshRates();
double SPREAD=MarketInfo(Symbol(),MODE_SPREAD);
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(val// double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
//int Stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
//if (Stops_level*pips//val=Ask+Stops_level*pips;
return(NormalizeDouble(val, Digits));
// return(val);
}
RefreshRates();
double ticketBuyStop= OrderSend(NULL,OP_BUYSTOP,LotsOptimized(),NDTP(Ask+StopLoss*pips),Slippage,0,NDTP(Ask+TakeProfit*pips),NULL,Magik,0,clrBlue);
RefreshRates();
double ticketSellStop=OrderSend(NULL,OP_SELLSTOP,LotsOptimized(),NDTP(Bid-StopLoss*pips),Slippage,0,NDTP(Bid-TakeProfit*pips),NULL,Magik,0,clrRed);
Изменено 20 января, 2019 пользователем 0ll
и зачем Вам RefreshRates() через строчку? - исполнение идёт миллисекунду, тик просто не успеет обновиться.
Пишу советника , вставил ALERT на открытие ордера. Он работает. Но он почему то работает и когда советник выключен... Выводит ALERT каждую секунду и не остановится , пока сову не удалишь из окна терминала. Так и должно быть ?
в любом эксперте, прежде, чем открывать позицию, вычисляется состояние рынка по каким-либо параметрам. Затем, если условия подошли, открывается позиция. Чтобы открыть позицию, эксперт вызывает функцию OrderSend. В параметры этой функции нужно передать самую свежую цену Bid или Ask, а пока эксперт вычислял состояние рынка, эти цены могли измениться. Но внутри всего блока OnTick, в текущем проходе, эти изменения автоматически не происходят. Новые цены будут только в следующем проходе OnTick, а нам они нужны в текущем проходе. Поэтому перед OrderSend надо написать RefrashRates вот поэтому я и написал перед OrderSend, RefrashRates. Вы считаете из за RefrashRates у меня ордера не открываются тогда почему в тестере ордера открываются.
в любом эксперте, прежде, чем открывать позицию, вычисляется состояние рынка по каким-либо параметрам. Затем, если условия подошли, открывается позиция. Чтобы открыть позицию, эксперт вызывает функцию OrderSend. В параметры этой функции нужно передать самую свежую цену Bid или Ask, а пока эксперт вычислял состояние рынка, эти цены могли измениться. Но внутри всего блока OnTick, в текущем проходе, эти изменения автоматически не происходят. Новые цены будут только в следующем проходе OnTick, а нам они нужны в текущем проходе. Поэтому перед OrderSend надо написать RefrashRates вот поэтому я и написал перед OrderSend, RefrashRates. Вы считаете из за RefrashRates у меня ордера не открываются тогда почему в тестере ордера открываются.
Если просто, у Вас действия (все действия) совершаются в функции OnInit(), а она запускается при первом запуске советника и все. Для работы и вообще нужна функция OnTick(). А обновление данных функцией RefrashRates происходит тоже при запуске - она здесь абсолютно бесполезна!
Вопрос был почему не открываются отложки? Потому что весь процесс записан в функции OnInit(). Совет (добрый), почитайте Функции обработки событий в учебнике, там хорошо всё "разжевано"
Добавлено: 20-01-2019 12:42:42
Пишу советника , вставил ALERT на открытие ордера. Он работает. Но он почему то работает и когда советник выключен... Выводит ALERT каждую секунду и не остановится , пока сову не удалишь из окна терминала. Так и должно быть ?
Потому что выполняются условия для Алерта, а если они выполняются советник/индикатор Вам об этом сообщает. Для этого надо ставить флаг, функцию для определения отправки алерта, функцию алерта только на открытие свечи/бара , и т.д. Если просто, то на каждом тике соблюдаются условия для сообщения с помощью алерта и поэтому они сыпятся бесконечно.
Изменено 20 января, 2019 пользователем loveЦ
Привет, помогите доработать советника, прикрутите к нему мартин и возможность закрывать сделки по % профита, сова неплоха на дневках, писали мне другой прогер в 13 году еще потом пропал и я забросил сову, теперь опять нашел на старом компе код, и решил продолжить, эксперименты, также если у кого есть идеи варианты милости прошу, сова по уровням мюрея, все довольно просто, но без мартина скучный профит дает.
Любая пара, дневной тайм.
Изменено 29 января, 2019 пользователем AAPL
Пишу советника , вставил ALERT на открытие ордера. Он работает. Но он почему то работает и когда советник выключен... Выводит ALERT каждую секунду и не остановится , пока сову не удалишь из окна терминала. Так и должно быть ?
мне кажется функция алерт в вашем коде не имеет ограничения, если уж сработала, то не имея стопа херачит с каждым
тиком. все это заполняет доступную ей память, она ставится в очередь и пока все не обработает, не остановится.
Тут даже тик не нужен, потому даже при выключеном советнике он трезвоним. лично я стаким сталкивался и
мое решение, после одного прохода сразу закрыть алерт булевой переменой, а при появлений сигнала опять ее открыть.
Привет всем! Есть советник (бывший скрипт) открывает байселлстоп ордера. Возможно его как то доработать, что бы после открытия серии ордеров он продолжал открывать по одному. Допустим пошла цена на верх, открывается селлстоп ближе к цене и наоборот.
Всем привет! Уважаемые программисты доработайте советник пожалуйста, файлы и ТЗ в архиве.
Заранее спасибо.
Желающим доработать свои советники: нужно как-то соблазнить программиста этим заняться. Не стесняйтесь, давайте больше информации, картинки, описание стратегии и т.д. Без этого думаю ни чего не получится.
Всем привет! Уважаемые программисты, доработайте советник Bamsbung_TMA_Mart_Div_Screen_2_EA пожалуйста, доработка заключается в добавлении в советник функции для отключения открытия ордеров
по сигналам стрелок индикатора 4BAMSBUNG_FLAME(Hist)_Div_Filter++ и добавления в настройки советника параметра false/true для отключения\включения этой функции в работу.
В советнике предусмотрена торговля по паттерну от индикатора 4BAMSBUNG_FLAME(Hist)_Div_Filter++, паттерн представляет собой появление точки на свече, а через какое-то количество
свечей появляется стрелка такого же цвета как точка, по сигналу этой стрелки открывается соответствующая позиция.
Если в советнике будет отключаться функция по открытию позиций по сигналу стрелки, значит советник должен уметь различать паттерн (комбинация точки и стрелки) и одиночную стрелку,
как два разных сигнала для открытия позиций, на скрине №3 подробное описание.
В советнике есть фильтр tma_filter_pate отвечающий за открытие позиции по сигналу точки, надо открытие позиции по сигналу паттерна привязать к параметру tma_diff_points_pate.
Так же надо исправить работу функции tma_middle_filtеr, не скриншоте №1 -описание работы этой функции, на скриншоте №2 в чем ошибка работы этой функции.
Эта функция должна работать с каждым условием открытия, т.е. с открытием по сигналу одной стрелки, с открытием по сигналу паттерна, с открытием по сигналу точки.
Надо убрать красную кнопку с графика, которая появляется после установки советника.
Заранее спасибо.
4BAMSBUNG_FLAMEHist_Div_Filter++.mq4
BAMSBUNG.dll
Bamsbung_TMA_Mart_Div_Screen_2_EA.mq4
TMA_CG_MTF_AA_TT_mod.mq4
Доброго времени суток, уважаемые!
Есть совенышь, можно ли его переделать, чтоб работал на RENKO графиках.
На просторах интернета, нашел увлекательно-душещипательную статью, о том, что надо изменить и дописать, http://myoption.ru/Renko-sovetnik-analiziruem-rynok-Foreks-po-kirpichikam, но вот незадача, в коде, ввиду своей неграмотности в программировании, я так и не нашел, куда применить знания, полученные в статье.
Нужен исходный код с расширением файла .mq4Есть совенышь, можно ли его переделать, чтоб работал на RENKO графиках.
Ну, это изи!!!
Ребята, кто поможет исправить Сову. На новой платформе он застрял
Ребята, кто поможет исправить Сову. На новой платформе он застрял
Проверил. Ошибок критических нет. В тестере открывает и закрывает.
Опишите проблему. Что значит застрял?
Доброго времени суток господа, пользуясь наличием времени (на сон тратится пол жизни), прочитал пару строк по программированию, попробовал переделать сов сам, ну нашел еще 1 сов и решил поковырять, в тестере на обычных графиках ведет себя как должен, т.е. никак, поставил на график, буду смотреть, если кому-то надо берите, работает или нет отпишусь позже.
Добавлено: 01-03-2019 11:42:01
Ура, епта!!!
Простите, эмоции, сов работает, сделки открывает, вроде даже как надо!!!
Так что, кому надо может пользоваться, щас попробую допилить еще пару кнопок и фунций от сайлент спека.
Добавлено: 01-03-2019 15:45:04
Рано радовался, надо допилить!!!
Изменено 1 марта, 2019 пользователем big13
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем