[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 67

 

Дописал строки в скрипт (добавил BUYSTOP и SELLSTOP), но он не хочет компиллироваться, выдаёт ошибки. Подскажите, пожалуйста, в чём дело?

#property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0, //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0, //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false, //открыть ордер SELL
extern bool BUYSTOP = false, //открыть ордер BUYSTOP
extern bool SELLSTOP = false, //открыть ордер SELLSTOP
extern double Lot = 0.1; //объем ордера
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");
}
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");
}
if (BUYSTOP)
{
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 Stop");
}
if (SELLSTOP)
{
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 Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask,Digits),SL,TP,"BUYSTOP",Magic,0,Blue);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid,Digits),SL,TP,"SELLSTOP",Magic,0,Red);
if (error==-1) //неудачная покупка OK
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
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;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------

Заранее благодарю

 
nemo811:

а можно заканчивать оператор не "," а ";"?

 
FreeLance:

а можно заканчивать оператор не "," а ";"?


Спасибо, я только учусь :))) Спасибо.
 
nemo811:

Спасибо, я только учусь :))) Спасибо.

Спасибо! сам такой... ;)
 
FreeLance:

Спасибо! сам такой... ;)

:)))) Ещё более животрепещущий вопрос. Этот скрипт рыночные ордера открывает, а отложенники не выставляет. Чевой-то я снова намудрил. Подскажите, если можно, в чём дело?
 
nemo811:

:)))) Ещё более животрепещущий вопрос. Этот скрипт рыночные ордера открывает, а отложенники не выставляет. Чевой-то я снова намудрил. Подскажите, если можно, в чём дело?

а в чём торговая идея?
 
У меня есть советник, кот. ордера открытые, установленные "ручками" игнорирует. Скрипт, кот. я пытаюсь модифицировать как раз и предназначен для того, что бы "ручной" ордер превратить в ордер с параметром magic. Вот такая идея.))
 
nemo811:
У меня есть советник, кот. ордера открытые, установленные "ручками" игнорирует. Скрипт, кот. я пытаюсь модифицировать как раз и предназначен для того, что бы "ручной" ордер превратить в ордер с параметром magic. Вот такая идея.))


Споки ноки!

Не смог понять - потому отложил.

Но вы тоже - не спешите. вчите матчасть!

Язык и объекты манупулирования просты...

Исполнение иногда хромает?

Так косорылость же с обеих сторон.

;)

 

Откорректировал вышеуказанный код. Не устанавливаются отложенники. Помогите, пожалуйста, найти ошибку.

#property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false; //открыть ордер SELL
extern bool BUYSTOP = false; //открыть ордер BUYSTOP
extern bool SELLSTOP = false; //открыть ордер SELLSTOP
extern double Lot = 0.1; //объем ордера
extern int slippage = 3; //Максимально допустимое отклонение цены для рыночных ордеров
extern int DistanceSet = 20; // Расстояние от рынка
//--------------------------------------------------------------------
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");
}
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");
}
if (BUYSTOP)
{
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 Stop");
}
if (SELLSTOP)
{
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 Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (error==-1) //неудачная покупка OK
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
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;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------

Спасибо.

 
Dimka-novitsek:


Да нет,все как раз строго наоборот,чем ви написали.Конечно,спасибо за внимание.Я крепко подумал,прикинул так и так,и вот,ви ошибаетесь.

Вообще,я вижу,проблема не в асках и бидах,и я ее еще не решил.Для всех напомню,чего спрашивал

Оч странные утверждения с вашей стороны. От крепости раздумий яблоко не полетит вверх, а всё-равно на голову шлёпнется...

Вот так и никак иначе.

Или вы живёте в отдельно взятой стране, где всё строго наоборот: прибыль - значение с минусом? Сами подумайте: покупаем по цене 1.0100, продаём по цене 1.0200 (тейк на этом уровне, т.е. выше цены покупки). Имеем прибыль 100 пп. И никак иначе не получится. Если вы попробуете поставить тейк на уровне 1.0000, то получите ошибку 130 - неправильные стопы. Тейк при покупке (OP_BUY) не может быть ниже цены открытия позиции. А вот стоп - как раз наоборот - должен быть ниже цены открытия позиции Buy. Для Sell всё наоборот - тейк ниже цены открытия, стоп - выше.

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

Причина обращения: