[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 83
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Прошу помочь. Вариант советника на стр 82 рабочий (написан для открытия 1 типа сделки), а приведённый ниже (для всех типов ордеров) - оказался с ошибкой: открывает ордера на каждом тике.
В чём моя ошибка?
Заранее благодарю.
Прошу помочь. Вариант советника на стр 82 рабочий (написан для открытия 1 типа сделки), а приведённый ниже (для всех типов ордеров) - оказался с ошибкой: открывает ордера на каждом тике.
В чём моя ошибка?
Заранее благодарю.
а где в коде контроль числа ордеров?
В кратце, какая идея советника? на первый взгляд этот код не откроет вообще сделки.
поменял значения флагов, сделки открылись по одному разу, но я не понимаю, что этот советник делает)))
extern int Magic = 0; //уникальный номер ордера
extern bool BUY = true; //открыть ордер BUY
extern bool BUY_STOP = true; //поставить ордер BUY STOP
extern bool BUY_LIMIT = true; //поставить ордер BUY LIMIT
extern bool SELL = true; //открыть ордер SELL
extern bool SELL_STOP = true; //поставить ордер SELL STOP
extern bool SELL_LIMIT = true; //поставить ордер SELL LIMIT
extern double Lot = 0.1; //объем ордера
extern int takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляется
extern int stoploss = 0; //уровень выставления SL, если 0, то SL не выставляется
extern int DistanceSet = 40; //расстояние от рынка для отложенника
extern int slippage = 3; //максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy");
BUY=false;
}
if (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell");
SELL=false;
}
if (BUY_STOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask + DistanceSet*Point - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Stop");
BUY_STOP=false;
}
if (SELL_STOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid - DistanceSet*Point + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Stop");
SELL_STOP=false;
}
if (BUY_LIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask - DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - DistanceSet*Point - stoploss*Point,Digits); else SL=0;
OPENORDER ("Buy Limit");
BUY_LIMIT=false;
}
if (SELL_LIMIT)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid + DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + DistanceSet*Point + stoploss*Point,Digits); else SL=0;
OPENORDER ("Sell Limit");
SELL_LIMIT=false;
}
return(0);
}
void OPENORDER(string ord)
{
int ticket = -1;
int err;
while (ticket<0)
{
if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Buy Stop" ) ticket=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Buy Limit" ) ticket=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ticket==-1) //неудачная попытка
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
}
return;
}
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Symbol());return;
case 3: Alert("Error неправильные параметры ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ",Symbol());return;
case 134: Alert("Недостаточно денег ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
case 129: Alert("Error Неправильная цена ",Symbol());return;
case 131: Alert("Error Неправильный объем ",Symbol());return;
case 4200:Alert("Error Объект уже существует ",Symbol());return;
}
}
Вобщем в таком виде он открывает по разу ордера и выставляет по одной отложке.
В кратце, какая идея советника? на первый взгляд этот код не откроет вообще сделки.
поменял значения флагов, сделки открылись по одному разу, но я не понимаю, что этот советник делает)))
))))Это часть другого советника. Собираю по кирпичикам ))
Смысл того другого - брать общий профит или профит в отдельности по каждой паре (удобно при использовании диверсификации). + Трейлинг чего только можно и др. функционал. За основу взят советник drknn universal_1_7
этот код будет просто суммировать спред и разницу между открытиями, соотв-но текущий вариант будет накапливать минус. не знаю где тут будет браться профит)
этот код будет просто суммировать спред и разницу между открытиями, соотв-но текущий вариант будет накапливать минус. не знаю где тут будет браться профит)
Вот малость уже устаревшая версия того, над чем я чейчас работаю. Автор drknn разрешил её выкладывать.
Вобщем в таком виде он открывает по разу ордера и выставляет по одной отложке.
Спасибо, заработало! )) Осталось определиться с контролем числа ордеров
просмотрел код-сломал мозг))) неблагодарное дело ковыряться в чужом коде, чтоб понять его работу. Если вы доверяете этому советнику то желаю успехов, чтобы всё получилось)
Лично я выдумал велосипед и написал свой совеник с нуля, зато я знаю где что и как работает и знаю почему не работает, и где искать ошибку)
как то так вобщем)