#379

Если уж что то делаешь, то предусматривай все варианты, у меня сейчас достаточно обширная собрание разных готовых функций, поэтому для написания советника мне нужно переписать всего 3 функции, собрать необходимый функционал и немного его подкорректировать, общих делов минимум, так что это твой скелет функции трала и ты его будешь использовать во многих своих роботах, поэтому неполенись \M/

#380

Парни помогите пожалуйста нужна строчка к сове, нужно чтоб ПЛЮСОВАЯ сделка закрывалась по индикатору а не по тейкпрофиту.

Вот код открытия первой сделки.

//=========================================================  Открытие первого Buy  ==============================================

double StartLot ;
int ticketbuy=0, ticketsell=0 ;
if (TradeBuy && totalbuy==0){
if (ticketbuy ==0){
if (Signal > 0 ) {
DeleteObject() ;
StartLot = NormalizeDouble(Lot,dig);
if(Info) Print("Команда на открытие первого BUY");
comment=StringConcatenate("1-й ордер Buy, ","Magic : ",MagicNumber) ;
ticketbuy = SendOrder(OP_BUY , StartLot, 0, 0, MagicNumber, comment, Error);
if (!IsTesting() || IsVisualMode() || !IsOptimization()){
if (Info) PlaySound("alert.wav");
Sleep(1000); // если это не тестирование - "засыпаем" на 1 секунду.;
}
}
}
}


Сигнал на покупку даёт строчка (Signal > 0 )

Добавлено: 19-09-2013 03:34:15

вроде нашёл код,

но надо теперь чтоб только плюсовые закрывал

if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber) {
if (OrderType() == OP_BUY) {
if (Signal OrderClose(OrderTicket(),OrderLots(),Bid,1); // закрываем позицию

} }
//--------------------------------------------------------

if (OrderType() == OP_SELL) {
if (Signal > 0 ){
OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию

} } }

Изменено 19 сентября, 2013 пользователем ss1975

#381

Ну можно просто добавить немного условий.

Спойлер

if (OrderType()==OP_BUY)
{
if (OrderOpenPrice() {
Функция закрытия данного ордера
}
}
if (OrderType()==OP_SELL)
{
if (OrderOpenPrice()>Ask)
{
Функция закрытия данного ордера
}
}



ну это примерный алгоритм, сам подкорректируешь как тебе надо
#382

Спасибо.
но немного сделал по другому,

 if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNumber)   { 
if (OrderType() == OP_SELL) {
if (Signal > 0 ){
if (SumProfit >0){

OrderClose(OrderTicket(),OrderLots(),Ask,1); // закрываем позицию

} }}}}

вроде работает)
эт я над интегрой изголяюсь))

Добавлено: 20-09-2013 04:00:19

Помогите доделать сигнального советника. сдаётся мне что я не то делаю

extern string Sound = "alert.wav"; //-- звуковой файл


//-------------------------------------------------------------------
int Bar_Count;
int Signal;
//-------------------------------------------------------------------
int init()
{

Bar_Count = iBars(Symbol(), Period());
return(0);
}

//-------------------------------------------------------------------
int start()
{

GetSignal();
if(Bar_Count {
if (Signal {
PlaySound(Sound);

}
Bar_Count = iBars(Symbol(), Period());
}}
///////////////////////////////////////////////////////////////////////////

if(Bar_Count {
if (Signal > 0 ){
{
PlaySound(Sound);

}
Bar_Count = iBars(Symbol(), Period());
}}
/////////////////////////////////////////////////////////////////////////
return(0);
}

//------------------------------------------------------------------

//+-------------------------------------------------------------------------------------+
//| Генерация сигналов покупки и продажи по значениям двух стохастиков |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
Signal = 0;

// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================

// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================

return(0);




Добавлено: 20-09-2013 07:22:27

Вроде сделал)
Спойлер


//+------------------------------------------------------------------+
//| MA_Gudok.mq4 |
//+------------------------------------------------------------------+

extern string Sound = "ss.wav"; //-- звуковой файл


//-------------------------------------------------------------------
int Signal;
int text;
int Bar_Count;
//-------------------------------------------------------------------
int init()
{
Bar_Count = iBars(Symbol(), Period());
return(0);
}

//-------------------------------------------------------------------
int start()
{

CheckMACross();
if(Bar_Count
{ if (Signal PlaySound(Sound);
//Alert (text+"SELL"); // Есть пересечение
Comment("ПОРА В SELL-УДАЧИ ");
Sleep(1000);
}
Bar_Count = iBars(Symbol(), Period());
}

//////////////////////////////////////////////////////

{ if (Signal > 0 ){
PlaySound(Sound);
Comment("ПОРА В BAY-УДАЧИ ");
//Alert (text+"BAY"); // Есть пересечение
Sleep(1000);
}
Bar_Count = iBars(Symbol(), Period());
}
return(1);
}

//------------------------------------------------------------------
int CheckMACross()
{
Signal = 0;

// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================

// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================

// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================

return(0);

}

Изменено 20 сентября, 2013 пользователем ss1975

#383

Вопрос все еще актуален, нужные функции есть в MT4i - TradeCopy декомпил обеих сов прилагаю. Возможно, кому-то удастся доработать советник.

Цитата

IncludeSymbols If not blank, a comma-separated list of symbols to include in the
messages to the receiver. This must exactlymatch the broker’s
names, including upper/lower case such as
EURUSDfx,GBPUSDfx. Trades for symbols which are not on
this list are not included.
IncludeMagicNumbers If not blank, a comma-separated list of EA magic numbers to
include in the messages to the receiver. For example,
0,1234,6789 will include manual orders (which have magic
number 0), plus orders from the EA(s) which use the magic
numbers 1234 and 6789

AccountExport-EA.mq427 скач.
MT4i_-_TradeCopy_Sender.mq432 скач.

#384

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

straightforward.mq415 скач.

#385

Выбираем ордер, потом
(TimeCurrent() - OrderOpenTime())/Таймфрейм*60
Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.
Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет.

#386


Выбираем ордер, потом
(TimeCurrent() - OrderOpenTime())/Таймфрейм*60
Таймфрейм в минутах. Если у тебя определенный можно написать PERIOD_M15 например.
Как автаматом узнать ТФ хз, сделай внешнию переменную пусть пользователь сам введет.


текущий таймфрейм возвращает функция Period()
таким образом получим:
bars = MathFloor((TimeCurrent() - OrderOpenTime())/Period()*60.0);

Можно также рассчитать с помощью функции iBarShift, которая возвращает номер бара по времени.
Только нужно учитывать, что нумерация обратная - тоесть нужно от более раннего отнимать познее время:
bars = iBarShift(NULL, 0, OrderOpenTime()) - iBarShift(NULL, 0, TimeCurrent());
#387

помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен

Expert_PSAR.mq413 скач.

#388


помогите, плз, прикрутить трал к советнику. Не знаю куда вставлять изменение ордера,чтобы проверял и корректировал 1 раз за свечу. Заранее благодарен



У Вас уже есть контроль открытия нового бара, и мне кажеться, что лучше всего вставить в блок 5 в оператор else для if (Signal != 0)...
Таким образом, если на текущем баре не было сигнала для открытия ордеров, то можем модифицировать существующие.
Также можно вынести функцию FindOrders(); из Trade и поставить ее перед оператором if: она нужна и для открытия ордеров и для трала, поэтому чтобы не дублировать вызов, лучше это сделать заранее.
#389

Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения.

Спойлер

extern int Kd1=1;
extern int Kd2=0;
extern int Kd3=0;
extern int Kd4=0;
extern int Kd5=1;
extern int Kd6=1;
extern int Kd7=1;
extern int Kd8=0;
extern int Kd9=0;
extern int Kd10=0;

static int Order[];
int init()
{
Order[0]=Kd1;
Order[1]=Kd2;
Order[2]=Kd3;
Order[3]=Kd4;
Order[4]=Kd5;
Order[5]=Kd6;
Order[6]=Kd7;
Order[7]=Kd8;
Order[8]=Kd9;
Order[9]=Kd10;
return(0);
}

int start()
{
for (int i=0; i {
Print ("Значение буфера ",i, " ", Order);
}
//....
return(0);
}




А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки.
#390


Подскажите пожалуйста, где я допустил ошибку или я ее недопустил? Уже несколько часов безуспешно бьюсь над этим незамысловатым наполнением массива, удалось локализовать баг в данном куске кода. Для проверки этого прописал в начале функции цикл вывода массива. Но в результате в журнале говорится, что каждое значение массива равно 0. Непомогли ни перевод переноса значений в основной цикл, ни даже перевод всей структуры на Bool значения.

Спойлер

extern int Kd1=1;
extern int Kd2=0;
extern int Kd3=0;
extern int Kd4=0;
extern int Kd5=1;
extern int Kd6=1;
extern int Kd7=1;
extern int Kd8=0;
extern int Kd9=0;
extern int Kd10=0;

static int Order[];
int init()
{
Order[0]=Kd1;
Order[1]=Kd2;
Order[2]=Kd3;
Order[3]=Kd4;
Order[4]=Kd5;
Order[5]=Kd6;
Order[6]=Kd7;
Order[7]=Kd8;
Order[8]=Kd9;
Order[9]=Kd10;
return(0);
}

int start()
{
for (int i=0; i {
Print ("Значение буфера ",i, " ", Order);
}
//....
return(0);
}




А жестко прописывать в условиях каждый вариант нехотелось бы. Буду благодарен за подсказки.



Массив хоть и указан без размера, но он не динамический как в некоторых языках.
Нужно перед использованием масива установить его размер с помощью ArrayResize(Order, 10);
и модификатор static там бесполезен: массив и так объявлен как глобальная переменная.

Изменено 7 декабря, 2017 пользователем Pavel888

#391

Прошу помощи у программистов!
Требуется конвертировать советника с mql4 в C# для cAlgo API
Советник не коммерческий. Писал его программист с соседнего форума.
Буду очень признателен!

EA.mq426 скач.

#392

Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами

experts.rar39 скач.

#393

но я бы обиделся, если бы с моим экспертом так поступили.

experts.rar90 скач.

#394

Делись уж теперь, чо за сова, какие ТФ, пары? ))

#395


Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами



в советнике нет привязки к счету...
accountNumber = 0;

пусть так и остаётся...
#396



Сова привязана к счету, можно открутить как нибудь?) чтобы использовать с другими счетами



в советнике нет привязки к счету...
accountNumber = 0;

пусть так и остаётся...


Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта.
#397
Цитата


Ну так правильно, я уже убрал привязку. В оригинале там стоял номер счёта.



упс... :)
пора спать!
#398

Друзья, взгляните в свободное время, плиз.
Вроде, как интересный советник для M1, на демо (Alpari, ECN) неплохо торгует. Ключ в архиве, работает до 9 ноября.

expert.rar39 скач.

#399

Убрал ограничение по времени...
Рекомендую оформить тему как положено для советников...

Trio_Dancer.ex440 скач.

Изменено 5 ноября, 2013 пользователем xbms

#400

Помогите пожалуйста доработать советник e-News-Lucky , которым с нами великодушно поделился Павел, что бы коэффициент лота к депозиту был постоянный. При росте депозита - рос и лот.
Депозит 1000 - лот 0,70; Депозит 1500 - лот 1,05; Депозит 2000 - лот 1,40; и пример на понижение: Депозит 500 - лот 0,35.
Только чтобы лот плавно рос в след за плавно растущим депозитом, и также плавно уменьшался при уменьшении депозита. Ну и чтобы была возможность выставить первоначальный лот не только 0,7 к 1000, но и другие значения.
Только если кто возьмется сделать такое, пожалуйста другие параметры советника не трогайте, не изменяйте.

e-News-Lucky$.mq418 скач.

#401

держи...

e-News-Lucky$_lots.mq448 скач.

#402

Друзья! У меня при компиляции одного советника компилятор выдал 3 предупреждения. Советник был декомпилирован. Вот они:

'f0_1' - comparison expression expected (93, 14)
'f0_4' - comparison expression expected (380, 14)
'f0_4' - comparison expression expected (491, 8)

В чем причина? Как их убрать и влияют ди они на функционал советника. Вот код к которому относятся ошибкиж ( строки с ошибками помечены комментариями // ЭТА СТРОКА)


'f0_1' - comparison expression expected (93, 14)


error_92 = GetLastError();
if (error_92 == 128/* TRADE_TIMEOUT */ || error_92 == 142 || error_92 == 143) {
Sleep(66000);
if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)) { // ЭТА СТРОКА
PlaySound("expert.wav");
return;
}
Print("Error(", error_92, ") set order: ", ErrorDescription(error_92), ", try ", Li_96);
} else {


--------------------------------------------------------

'f0_4' - comparison expression expected (380, 14)

if (error_84 == 128/* TRADE_TIMEOUT */ || error_84 == 142 || error_84 == 143) {
Sleep(66666.0);
if (f0_4(A_symbol_0, A_cmd_8, A_magic_36, datetime_52)) { // ЭТА СТРОКА
PlaySound("alert2");
break;
}
}


--------------------------------------

'f0_4' - comparison expression expected (491, 8)

if (f0_4("", -1, MagicNumber)) { // ЭТА СТРОКА
if (a1(Ld_0, TrailingStop, TrailingStart, AccountBalance())) {
if (a2(Gd_196, Ld_0, TrailingStop, TrailingStep, AccountEquity())) {
Gd_196 = Ld_0 - TrailingStop;
Alert(AccountCompany(), " Достигнут новый уровень профита." + DoubleToStr(Gd_196, 0));
}
}
} else Gd_196 = -999999999;


#403

Возможно стоит проверить как объявлены эти функции. По тому как их используют они должны иметь Тип bool и для того чтобы уж наверняка исключить, в условия их использования стоит вписать сравнение по типу if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==True) или if (f0_1(A_symbol_0, A_cmd_8, A_magic_44, datetime_64)==1)

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025