#1529

Здравствуйте уважаемые форумчане. Нашел на этом форуме советник,но он не присоединятся к графику. Не посмотрите что с ним? Заранее спасибо)

USD-M-1.01-12.11.2017.mq416 скач.

#1530


Здравствуйте уважаемые форумчане. Нашел на этом форуме советник,но он не присоединятся к графику. Не посмотрите что с ним? Заранее спасибо)

Всё работает.
#1531

он не присоединятся к графику. Не посмотрите что с ним?

Наверное нужно скомпилировать в editor-е... Держи.

USD-M-1.01-12.11.2017.ex412 скач.

#1532

Уважаемый 0ll,у меня к Вам еще один вопрос. Я попытался этот советник сам скомпилировать в editor-е. и у меня выдал такую ошибку. Не подскажите что тут нужно исправить?

компиляция.jpg

#1533
Andrey98 этой ошибки нет у меня и других похоже тоже... Видимо что-то слетело или в Эдиторе или в используемых библиотеках. Нужно заново скачать весь комплект или попробуйте скомпилировать в терминале другого брокера.
#1534

Привет!
Помогите пожалуйста)
Есть ли такая функция которая множит не лот, а количество ордеров в сеточном советники?
Или как ее прописать?

int order_type = FindLastOrderType();
if ( order_type== OP_BUY)
{
price=FindLastOrderPrice( OP_BUY);
if( Ask {
lastlot= FindLastLots( OP_BUY);
lastlot = NormalizeDouble ( lastlot*Multiplier,2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask,5,0, 0, "", Magic,0, Blue);
if ( ticket Print ( "Ошибка открытия ордера на покупку");
ModifyOrders( OP_BUY);

#1535

Есть ли такая функция которая множит не лот, а количество ордеров в сеточном советники?

Есть формула, вот: на 1 входе лот = л1, на 2 входе л2=л1*кф, л3 = л1*кф*кф, ... , лn = л1 * кф^(кол.орд. - 1).
Дальше сами, справитесь?
#1536

Походу не справлюсь)
не пойму где ее надо прописать?

#1537


Походу не справлюсь)
не пойму где ее надо прописать?


У Вас она с горем пополам написана))Просто Вы выдали нам кусок кода, где, вроде, похоже, описаны входы в покупки через определенный шаг (step) с увеличением лота на какой то коэффициент (Multiplier) как в сеточнике с мартином. НО! Поймите правильно, я, например, не ясновидящий , не могу предсказать код, который был до/после этого обрывка. Если у Вас не суперсекретный код советника и если Вы хотите, чтобы Вам помогли, отправляйте исходник совы сюда и опишите конкретно, что у Вас не получается. Я уверен найдется программер, который поможет!
#1538



Походу не справлюсь)
не пойму где ее надо прописать?


У Вас она с горем пополам написана))Просто Вы выдали нам кусок кода, где, вроде, похоже, описаны входы в покупки через определенный шаг (step) с увеличением лота на какой то коэффициент (Multiplier) как в сеточнике с мартином. НО! Поймите правильно, я, например, не ясновидящий , не могу предсказать код, который был до/после этого обрывка. Если у Вас не суперсекретный код советника и если Вы хотите, чтобы Вам помогли, отправляйте исходник совы сюда и опишите конкретно, что у Вас не получается. Я уверен найдется программер, который поможет!


Вот весь советник. Написал по видеоурокам))
Нужно что бы с шагом увеличивалось количество ордеров , а не лотов.
Пробовал перемножать тикет или ордер на Мультилот, не работает так вообще.

Спойлер

extern double Lots = 0.1;
extern int TakeProfit =50 ;
extern int Step = 50;
extern double Multiplier=2;
extern int Magic = 123;

int ticket;
double tp, price,rsi, lastlot;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{

if (Digits ==3 || Digits==5)
{
TakeProfit *=10;
Step*=10;
}
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}

void OnTick()
{
rsi = iRSI(Symbol(),PERIOD_H1,14,0, 1) ;
if ( CountTrades() ==0)
{
if ( rsi {
tp = NormalizeDouble (Ask + TakeProfit*Point, Digits);
ticket = OrderSend( Symbol(),OP_BUY, Lots, Ask, 5, 0, tp, "1 ордер", Magic, 0, Blue);

}
if ( rsi >70 )
{
tp = NormalizeDouble (Bid - TakeProfit*Point, Digits);
ticket = OrderSend( Symbol(),OP_SELL, Lots, Bid, 5, 0, tp, "1 ордер", Magic, 0, Red);
}
}
else
{
int order_type = FindLastOrderType();
if ( order_type== OP_BUY)
{
price=FindLastOrderPrice( OP_BUY);
if( Ask {
lastlot= FindLastLots( OP_BUY);
lastlot = NormalizeDouble ( lastlot*Multiplier,2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask,5,0, 0, "", Magic,0, Blue);
if ( ticket Print ( "Ошибка открытия ордера на покупку");
ModifyOrders( OP_BUY);
}
}
if ( order_type== OP_SELL)
{
price=FindLastOrderPrice( OP_SELL);
if( Bid>=price + Step*Point )
{
lastlot= FindLastLots( OP_SELL);
lastlot = NormalizeDouble ( lastlot*Multiplier,2);
ticket= OrderSend(Symbol(), OP_SELL, lastlot, Bid,5,0, 0, "", Magic,0, Red);
if ( ticket Print ( "Ошибка открытия ордера на продажу");
ModifyOrders( OP_SELL);
}
}
}
}
void ModifyOrders( int otype)
{
double avg_price, order_lots=0;
price = 0;
for ( int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()== Symbol() && OrderMagicNumber()== Magic && OrderType()==otype)
{
price+=OrderOpenPrice()*OrderLots();
order_lots+=OrderLots();
}
}
}
avg_price= NormalizeDouble(price/ order_lots, Digits);
if(otype == OP_BUY) tp = NormalizeDouble(Ask+TakeProfit *Point, Digits);
if(otype == OP_SELL) tp = NormalizeDouble(Bid- TakeProfit *Point, Digits);
for (int i = OrdersTotal()-1; i>=0; i--)
{
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()== Magic && OrderType()==otype)
{
if( OrderModify( OrderTicket(), OrderOpenPrice(), 0, tp, 0))
Print("Ордер успешно модифицирован");
else Print (" Ошибка модификации" );
}
}
}
}
double FindLastLots( int otype)
{
int oldticket;
double oldlots= 0;
ticket =0;
for (int cnt= OrdersTotal() -1; cnt>=0; cnt--)
{ if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol() == Symbol () && OrderMagicNumber()== Magic && OrderType()== otype)
{
oldticket=OrderTicket();
if ( oldticket> ticket)
{
ticket= oldticket;
oldlots=OrderLots();
}
}
}
}
return(oldlots);
}
double FindLastOrderPrice(int otype)
{
int oldticket;
double oldopenprice=0;
ticket =0;
for (int cnt= OrdersTotal() -1; cnt>=0; cnt--)
{ if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES))
{
if( OrderSymbol() == Symbol () && OrderMagicNumber()== Magic && OrderType()== otype)
{
oldticket=OrderTicket();
if ( oldticket> ticket)
{
ticket= oldticket;
oldopenprice=OrderOpenPrice();
}
}
}
}
return(oldopenprice);
}
int FindLastOrderType()
{
for (int i= OrdersTotal()-1 ; i>=0; i--)
{
if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol () && OrderMagicNumber()== Magic)
return (OrderType());
}
}
return (-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count =0;
for ( int i =OrdersTotal() -1 ; i>=0 ; i --)
{
if (OrderSelect ( i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol () && OrderMagicNumber()== Magic)
if ( OrderType() == OP_BUY || OrderType() == OP_SELL)
count++;
}
}
return( count);
}

Изменено 11 декабря, 2018 пользователем 0ll

#1539

Пробуйте :)

2018-12-11_10-10-40.png
setka.ex411 скач.
setka.mq421 скач.

#1540


Пробуйте :)



Спасибо большое!
Но у меня все равно по прежнему увеличивается лот в два раза,
а хотелось бы что увеличивалось количество одинаковых ордеров в два раза.
#1541

Я так понимаю Вы хотите, чтобы на первом шаге ордер открылся с 0.1 лотом, на втором открылось 2 ордера по 0.1 лоту (0.2), на третьем 4 ордера по 0.1 лоту (0.4) .......на n шаге открылось 2*n ордеров?

#1542


Я так понимаю Вы хотите, чтобы на первом шаге ордер открылся с 0.1 лотом, на втором открылось 2 ордера по 0.1 лоту (0.2), на третьем 4 ордера по 0.1 лоту (0.4) .......на n шаге открылось 2*n ордеров?



Да,
совершенно верно.
Можно так сделать?
#1543

Сделать то можно, но нужно понять для чего Вам это нужно. Во первых, открыть два ордера по одной цене не получиться, не получиться сразу(скорость исполнения ордеров). Во вторых, если вы потом хотите закрывать один (одни) из ордеров, то лучше использовать функцию частичных закрытия ордеров. В третьих, даже если Вам сделают открытия одновременное открытие ордеров, то на тестере будет все окей, а на реале будет беда. Т.е. в тестере, к примеру,в покупку на третьем шаге откроется 4 ордера по цене 1.25000(фунт пятизнак), а в реале, если цена идет в лонг, может быть разброс 1.25000, 1.25020.......1.25150, зависит от вида счета, волатильности, брокера, скорости исполнения и т.д.
Подумай еще раз о функции частичного закрытия ордеров. Так Вы сможете открыть один ордер по одной цене с объемом 0.4 (на третьем шаге), а потом, с помощью функции закрывать их частично, используя свои условия.
Надеюсь объяснил и коллеги поддержат;)
#1544

Чтоб скрыть использование мартингейла, некоторые продавцы советников используют открытие нескольких ордеров одинаковым лотом - наверно это единственное разумное объяснение для такого подхода...

#1545


Чтоб скрыть использование мартингейла, некоторые продавцы советников используют открытие нескольких ордеров одинаковым лотом - наверно это единственное разумное объяснение для такого подхода...



Да мне нечего скрывать)
Смысл что бы множил ордера, а не лоты, для того что бы на разных счетах копировались сделки, и на каждом можно было бы отдельно прописывать стартовый лот, в зависимости от депозита.
#1546

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

В сетках лот может вырасти до сотни раз!
т.е. Вы стремитесь открыть на счете одновременно сотни ордеров?! и управлять ими... - сомнительное решение. На некоторых реальных счетах есть ограничение в 25 ордеров, на демо ещё меньше. Почитайте ветку советника сетка, там люди упёрлись в ограничение по количеству запросов к серверу, т.е. сервер брокера такую много-ордерную торговлю воспринимает как спам сервера. В общем крайне не рекомендую.
#1547

валютная пара евродоллар М1
работает тока на тестере, требует лечения

На форуме есть раздел "Совы в розыске", Вам туда, но результаты тестов или торговли нужно сразу публиковать.
#1548

Всем привет, готов помочь любому желающему с доработкой бота или индикатора. Опыт в этом деле имею, пишите.

#1549

Пробую создать простенький советник на основе стохастика. Учусь. При компеляции выдает ошибку; OnCalculate function not found in custom indicator. Разобраться в чём дело не смог. Кто подскажет? Это первый советник который я пробую накарябать))

Проба.mq48 скач.

Изменено 24 декабря, 2018 пользователем NGLA

#1550

При компеляции выдает ошибку; OnCalculate function not found in custom indicator.


У тебя нет индикатора "Stochastic" в папке indicators скорее всего.

Вообще, если используешь стандартные индюки, то правильнее вызывать их не через iCustom.
В твоем случае это будет:

double Line11= iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,1,MODE_MAIN,1);
double Line12= iStochastic(NULL,0,InpKPeriod,InpDPeriod,InpSlowing,MODE_SMA,1,MODE_MAIN,2);

#1551

Если нужна доработка советников платформы cTrader пишите мне

#1552
karuzzo создайте свою тему, объявите условия, имейте в виду: форум не коммерческий и должны быть бесплатные опции.
#1553

Доброго времени суток! Старый советник не компилируется под новый билд выдаёт 3 ошибки, мне его как раз под новый билд нужно скомпилировать. Был бы весьма признателен если подправите бота. И выложите пожалуйста в открытом виде .mq4

FX_Pro_Bot_-TinoEUM5.mq415 скач.

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

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