Здравствуйте уважаемые форумчане. Нашел на этом форуме советник,но он не присоединятся к графику. Не посмотрите что с ним? Заранее спасибо)
Доработка советников: общая тема📌
От Garfik, 4 августа, 2011 в Уголок Программиста
Всё работает.
Здравствуйте уважаемые форумчане. Нашел на этом форуме советник,но он не присоединятся к графику. Не посмотрите что с ним? Заранее спасибо)
Наверное нужно скомпилировать в editor-е... Держи.он не присоединятся к графику. Не посмотрите что с ним?
Уважаемый 0ll,у меня к Вам еще один вопрос. Я попытался этот советник сам скомпилировать в editor-е. и у меня выдал такую ошибку. Не подскажите что тут нужно исправить?
Привет!
Помогите пожалуйста)
Есть ли такая функция которая множит не лот, а количество ордеров в сеточном советники?
Или как ее прописать?
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);
Есть формула, вот: на 1 входе лот = л1, на 2 входе л2=л1*кф, л3 = л1*кф*кф, ... , лn = л1 * кф^(кол.орд. - 1).Есть ли такая функция которая множит не лот, а количество ордеров в сеточном советники?
Дальше сами, справитесь?
Походу не справлюсь)
не пойму где ее надо прописать?
Походу не справлюсь)
не пойму где ее надо прописать?
У Вас она с горем пополам написана))Просто Вы выдали нам кусок кода, где, вроде, похоже, описаны входы в покупки через определенный шаг (step) с увеличением лота на какой то коэффициент (Multiplier) как в сеточнике с мартином. НО! Поймите правильно, я, например, не ясновидящий , не могу предсказать код, который был до/после этого обрывка. Если у Вас не
Походу не справлюсь)
не пойму где ее надо прописать?
У Вас она с горем пополам написана))Просто Вы выдали нам кусок кода, где, вроде, похоже, описаны входы в покупки через определенный шаг (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
Пробуйте :)
Спасибо большое!
Но у меня все равно по прежнему увеличивается лот в два раза,
а хотелось бы что увеличивалось количество одинаковых ордеров в два раза.
Я так понимаю Вы хотите, чтобы на первом шаге ордер открылся с 0.1 лотом, на втором открылось 2 ордера по 0.1 лоту (0.2), на третьем 4 ордера по 0.1 лоту (0.4) .......на n шаге открылось 2*n ордеров?
Я так понимаю Вы хотите, чтобы на первом шаге ордер открылся с 0.1 лотом, на втором открылось 2 ордера по 0.1 лоту (0.2), на третьем 4 ордера по 0.1 лоту (0.4) .......на n шаге открылось 2*n ордеров?
Да,
совершенно верно.
Можно так сделать?
Сделать то можно, но нужно понять для чего Вам это нужно. Во первых, открыть два ордера по одной цене не получиться, не получиться сразу(скорость исполнения ордеров). Во вторых, если вы потом хотите закрывать один (одни) из ордеров, то лучше использовать функцию частичных закрытия ордеров. В третьих, даже если Вам сделают открытия одновременное открытие ордеров, то на тестере будет все окей, а на реале будет беда. Т.е. в тестере, к примеру,в покупку на третьем шаге откроется 4 ордера по цене 1.25000(фунт пятизнак), а в реале, если цена идет в лонг, может быть разброс 1.25000, 1.25020.......1.25150, зависит от вида счета, волатильности, брокера, скорости исполнения и т.д.
Подумай еще раз о функции частичного закрытия ордеров. Так Вы сможете открыть один ордер по одной цене с объемом 0.4 (на третьем шаге), а потом, с помощью функции закрывать их частично, используя свои условия.
Надеюсь объяснил и коллеги поддержат;)
Чтоб скрыть использование мартингейла, некоторые продавцы советников используют открытие нескольких ордеров одинаковым лотом - наверно это единственное разумное объяснение для такого подхода...
Чтоб скрыть использование мартингейла, некоторые продавцы советников используют открытие нескольких ордеров одинаковым лотом - наверно это единственное разумное объяснение для такого подхода...
Да мне нечего скрывать)
Смысл что бы множил ордера, а не лоты, для того что бы на разных счетах копировались сделки, и на каждом можно было бы отдельно прописывать стартовый лот, в зависимости от депозита.
В сетках лот может вырасти до сотни раз!Смысл что бы множил ордера, а не лоты, для того что бы на разных счетах копировались сделки, и на каждом можно было бы отдельно прописывать стартовый лот, в зависимости от депозита.
т.е. Вы стремитесь открыть на счете одновременно сотни ордеров?! и управлять ими... - сомнительное решение. На некоторых реальных счетах есть ограничение в 25 ордеров, на демо ещё меньше. Почитайте ветку советника сетка, там люди упёрлись в ограничение по количеству запросов к серверу, т.е. сервер брокера такую много-ордерную торговлю воспринимает как спам сервера. В общем крайне не рекомендую.
На форуме есть раздел "Совы в розыске", Вам туда, но результаты тестов или торговли нужно сразу публиковать.валютная пара евродоллар М1
работает тока на тестере, требует лечения
Всем привет, готов помочь любому желающему с доработкой бота или индикатора. Опыт в этом деле имею, пишите.
Пробую создать простенький советник на основе стохастика. Учусь. При компеляции выдает ошибку; OnCalculate function not found in custom indicator. Разобраться в чём дело не смог. Кто подскажет? Это первый советник который я пробую накарябать))
Изменено 24 декабря, 2018 пользователем NGLA
При компеляции выдает ошибку; 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);
Если нужна доработка советников платформы cTrader пишите мне
Доброго времени суток! Старый советник не компилируется под новый билд выдаёт 3 ошибки, мне его как раз под новый билд нужно скомпилировать. Был бы весьма признателен если подправите бота. И выложите пожалуйста в открытом виде .mq4
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем