Помогите довести до ума сову. Сейчас она может работать только на отдельном счёте и по одной паре, т.к. может выбрать только последний ордер из истории и определить отсутствие открытых позиций. Нужно чтобы определяла свои ордера по мэджику и символу в истории и в списке открытых ордеров. СОВА_у-у_у-у.mq4
Доработка советников: общая тема📌
От Garfik, 4 августа, 2011 в Уголок Программиста
В 22.06.2019 в 12:01, t11001 сказал:Помогите довести до ума сову. Сейчас она может работать только на отдельном счёте и по одной паре, т.к. может выбрать только последний ордер из истории и определить отсутствие открытых позиций. Нужно чтобы определяла свои ордера по мэджику и символу в истории и в списке открытых ордеров. СОВА_у-у_у-у.mq4
уже не надо сделал сам. подглядел в другом советнике как написать функцию
Вроде, как я вижу, в конце лишняя "}" , строчка 290)
В 30.06.2019 в 14:50, loveЦ сказал:Вроде, как я вижу, в конце лишняя "}" , строчка 290)
Исправил
Изменено 3 июля, 2019 пользователем Gold Advisor
26 минут назад, loveЦ сказал:Вроде, как я вижу, в конце лишняя "}" , строчка 290)
Как я понимаю я функцию не в то место ставлю. А вот куда ставить правильно не знаю( Возможно вы подскажите?
1 минуту назад, Gold Advisor сказал:Абсолютно верно. НО если так вторую скобку не поставить, то вот такая ошибка
Внимательно смотрите скобки. Качество имдж не позволяет разглядеть всё, но кажется в строке 650 должны стоять "()", а у Вас вроде {)
А так в "Ошибки" видно где ошибки))) и строка и столбец, смотрите справа.
7 минут назад, Gold Advisor сказал:Как я понимаю я функцию не в то место ставлю. А вот куда ставить правильно не знаю( Возможно вы подскажите?
Без проблем, свяжитесь со мной как нибудь))
6 минут назад, loveЦ сказал:Без проблем, свяжитесь со мной как нибудь))
Написал в ЛС
Добрый день суток есть советник он привязон к счёту ,каму можно обратитса чтоб отвезать от счёта название Traideringer V2иV3
2 часа назад, alek13 сказал:Добрый день суток есть советник он привязон к счёту ,каму можно обратитса чтоб отвезать от счёта название Traideringer V2иV3
Создайте тему в "Совы в розыске"
Приветствую повелителей Кода!
Прошу помощи, так как сам пока разобраться не могу.
Советник собран в конструкторе и работает на основе Force Index. Сейчас сигнал он дает только при развороте, то есть разном направлении индикатора и цены(линия индикатора направлена вниз - свеча вверх), но по моей логике он должен поступать в том числе и в случае отклонения индикатора на 30%. Было бы конечно круто иметь возможность варьировать это отклонение, чтобы вычислить оптимальное, но как я понимаю, это уже сложно.

Очень подозреваю, что изменить нужно логику работы вот в этом месте, но я не понимаю, в самой формуле или в обозначениях баров.
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Indicator::IndicatorChangesItsDirectionUpward(int firstBar,int previous,double &adIndValue[],
IndicatorComp &indCompLong,IndicatorComp &indCompShort)
{
double sigma= Sigma();
for(int bar = firstBar; bar<Data.Bars; bar++)
{
int bar0 = bar - previous;
int bar1 = bar0 - 1;
while(MathAbs(adIndValue[bar0]-adIndValue[bar1])<sigma && bar1>firstBar)
bar1--;
int bar2=bar1-1>firstBar ? bar1-1 : firstBar;
while(MathAbs(adIndValue[bar1]-adIndValue[bar2])<sigma && bar2>firstBar)
bar2--;
indCompLong.Value[bar]=(adIndValue[bar2]>adIndValue[bar1] && adIndValue[bar1]<adIndValue[bar0] &&
bar1==bar0-1) ? 1 : 0;
indCompShort.Value[bar]=(adIndValue[bar2]<adIndValue[bar1] && adIndValue[bar1]>adIndValue[bar0] &&
bar1==bar0-1) ? 1 : 0;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Indicator::IndicatorChangesItsDirectionDownward(int firstBar,int previous,double &adIndValue[],
IndicatorComp &indCompLong,IndicatorComp &indCompShort)
{
double sigma= Sigma();
for(int bar = firstBar; bar<Data.Bars; bar++)
{
int bar0 = bar - previous;
int bar1 = bar0 - 1;
while(MathAbs(adIndValue[bar0]-adIndValue[bar1])<sigma && bar1>firstBar)
bar1--;
int bar2=bar1-1>firstBar ? bar1-1 : firstBar;
while(MathAbs(adIndValue[bar1]-adIndValue[bar2])<sigma && bar2>firstBar)
bar2--;
indCompLong.Value[bar]=(adIndValue[bar2]<adIndValue[bar1] && adIndValue[bar1]>adIndValue[bar0] &&
bar1==bar0-1) ? 1 : 0;
indCompShort.Value[bar]=(adIndValue[bar2]>adIndValue[bar1] && adIndValue[bar1]<adIndValue[bar0] &&
bar1==bar0-1) ? 1 : 0;
}
}
И если не сложно, подскажите, что прописать(и где
), чтобы выше МА лонг был в 2 раза больше шорта и наоборот, ниже МА шорт в 2 раза больше лонга.
Прошу прощения, если написал запутанно или не точно.
Заранее большое спасибо!!!!!!!
Изменено 15 июля, 2019 пользователем Gaiver
Всем привет! Хотел бы узнать, есть платный советник DaVinci. Над ним работает целая команда. Мне для своих целей нужно убрать в самой сове все надписи со словом Da Vinci. То есть чтобы когда ставишь сову в терминале, вместо слов DaVinci были слова PSB. Можно ли так сделать? Со своей стороны отблагодарю материально! Файл во вложении.
Хотите продавать под другим именем ? Обычно для этих целей берут советник с открытым кодом, чаще всего вот этот:
Изменено 18 июля, 2019 пользователем pavlus777
Где-то я подобное уже видел, хотя может только название похожее на сайт продажи
Добрый день.
Написал советника на открытия, и закрытия в определенное время.
Открывает в нужном месте. но закрыть не может.
Подозреваю что проблема в лишней паре фигурных скобок.
Думал свежий взгляд быстро найдет проблему.
Спасибо.
//+------------------------------------------------------------------+
//| bit.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern double Lott= 0.2;
extern int Magic = 12456;
extern int Slippage=10;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//-------------------------Open order--------------------------------------------------------------------
{
if(OrdersTotal()==0 && ОткрытьОрдерВовремя(НужноОткрытВ,ЕщеНепоздно)==0)
{
if(ticket=OrderSend(Symbol(),OP_BUY,Lott,Ask,0,0,0,Magic,0,Gold));
Print("Ошибка выставления ордера");
}
}
//----------------Closed order------------------------------------------------------------------------
if(TimeToClosed(NeedToClosed,WeHaveChoice)==0 )
{
OrderClose(1,1,Ask,3,Red);
return;
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//-----------------------------------------------------------------------------------------
//--------------------------------Обработка времени---------------------------------------------------------
datetime НужноОткрытВ=StrToTime("00:15");// Время открытия
datetime ЕщеНепоздно=60*10;// Ждем тика максимуи 2 минуты
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int ОткрытьОрдерВовремя(datetime ВремяОткрытия,datetime ВремяУшло)
// ВремяОткрытия -когда нужно открыть ордер
// ВремяУшло - допустимое ожидание после ВремяОткрытия, когда ещё можно открывать ордер
// Возвращает -1 Время ещё недостигнуто
// 0 Пора открывать ордер
// +1 Поздно открывать
{
int Result=0;
if(TimeCurrent()<ВремяОткрытия) Result=-1;
if(TimeCurrent()>=ВремяОткрытия+ВремяУшло) Result=1;
return(Result);
Print("sd",Result);
}
//-----------------Time to closed------------------------------------------------------------------------
datetime NeedToClosed=StrToTime("23:00");
datetime WeHaveChoice=60*10;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int TimeToClosed(datetime NeedToClosed,datetime WeHaveChoice)
{
int Result2=0;
if(TimeCurrent()<NeedToClosed) Result2=-1;
if(TimeCurrent()>=NeedToClosed+WeHaveChoice)Result2=1;
return(Result2);
}
//+-----------Количество ордеров-----------------------------------------+
int count()
{
int count=0;
{
for(int trade=OrdersTotal()-1; trade>=0; trade--)
{
if(OrderMagicNumber()==Magic)
count++;
}
}
return(count) ;
}
А Вы смотрели справку по функции OrderClose ? Насчёт скобок не знаю, но тикет и лот нужно чётко указывать.
|
bool OrderClose( |
11 минут назад, 0ll сказал:А Вы смотрели справку по функции OrderClose ? Насчёт скобок не знаю, но тикет и лот нужно чётко указывать.
bool OrderClose(
int ticket, // номер ордера
double lots, // количество лотов
double price, // цена закрытия
int slippage, // максимальное проскальзывание
color arrow_color // цвет
);
Спасибо за ответ.
Делал по курсу с TLP
Изображения прикрепил. (С https://www.youtube.com/watch?time_continue=2699&v=63REtIKc4gQ)
Попытался четко указать лот и тикет, но это ситуацию не изменило.
Попробуйте заменить
if(TimeToClosed(NeedToClosed,WeHaveChoice)==0 )
{
OrderClose(1,1,Ask,3,Red);
return;
}
на:
if ( Hour() >= 23 ) for ( int no = OrdersTotal() - 1; no >= 0; no-- )
{
if ( !OrderSelect(no, SELECT_BY_POS, MODE_TRADES) || OrderSymbol() != _Symbol
|| !( OrderMagicNumber() == Magic ) ) continue;
OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrGray );
}
В 24.07.2019 в 19:57, 0ll сказал:Попробуйте заменить
if(TimeToClosed(NeedToClosed,WeHaveChoice)==0 )
{
OrderClose(1,1,Ask,3,Red);
return;
}на:
if ( Hour() >= 23 ) for ( int no = OrdersTotal() - 1; no >= 0; no-- )
{
if ( !OrderSelect(no, SELECT_BY_POS, MODE_TRADES) || OrderSymbol() != _Symbol
|| !( OrderMagicNumber() == Magic ) ) continue;
OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 3, clrGray );
}
Спасибо за предложений вариант. Но к сожалению это не помогло.
17 минут назад, andrijmix@gmail.com сказал:
Спасибо за предложений вариант. Но к сожалению это не помогло.
Попробуйте после открытия ордера запомнить тикет , и использовать его при закрытие ордера
типа
ticket = Открываем ордер;
if (ticketb > 0) {if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) TICKET = OrderTicket();}
И при закрытие
OrderClose( TICKET, OrderLots(), Ask или Bid, 3, clrGray ); ask или bid в зависимости от типа ордера
Изменено 26 июля, 2019 пользователем loveЦ
Добрый День. Ребят помогите плиз доработать советник. Советник очень прост и в его работу надо добавить один индикатор. Кто может доведите его до ума)). ТЗ и все файлы приложены к архиву.
Добрый день. Как можно реализовать советник в котором две независимые сетки (на продажу и покупку) ?
Возможно кто-то умеет код такого, сбросите пожалуйста.
9 часов назад, andrijmix@gmail.com сказал:Добрый день. Как можно реализовать советник в котором две независимые сетки (на продажу и покупку) ?
Возможно кто-то умеет код такого, сбросите пожалуйста.
На форуме море таких советников.Смотрите [Советник] Forex Setka Trader Mod и [EA]-Setka к примеру
Изменено 4 августа, 2019 пользователем 0ll
9 часов назад, valerii.badaev@gmail.com сказал:На форуме море таких советников.Смотрите [Советник] Forex Setka Trader Mod и [EA]-Setka к примеру
Мне не нужен советник, мне нужна идея как сделать. Forex Setka на форуме без кода, если у Вас есть код Forex Setka сбросьте пожалуйста.
Изменено 4 августа, 2019 пользователем 0ll
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем