Ребята, посмотрите пожалуйста мою программу. Чего в ней не хватает? или что-то лишнее есть? Как это исправить?Еще не могу определиться какие значения присвоить стоплосу и тейкпрофиту. Объясните мне. - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А вообще ошибок наверно больше чем строк кода. На большинство из них укажет попытка компиляции советника
Да я знаю, поэтому и помощи прошу. Знаний у меня не хватает! Да, и с этим я согласна полностью.
и bool Check() нужна же для проверки средств. Как программа будет торговать, если баланс в нуле?
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=false; //для открытия ордера на продажу
extern int takeprofit=100;
extern double Lots=0.1;
extern int stoploss=100;
extern int TrailingStop=35;
extern int Magic = 2563;
double SL,TP;
//double LOT;
//datetime LastTradeTime; // время последней торговой операции//
//--------------------------------------------------------------------
int start()
{
double upper_threshold=70; //верхний порог
double lower_threshold=30; // нижний порог
double price=Bid; //цена
int k;
int flag=0;
if (price > upper_threshold)
{flag=1;}
if (price < lower_threshold)
{flag=-1;}
if (flag==1)
{
TP = Ask + takeprofit*Point;
SL = Ask - stoploss*Point;
//LOT = LOT(risk,1);
k=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP,NULL, Magic,0,CLR_NONE);
if (k<0){Print("Ошибка открытия BUY #",GetLastError());return(0);}
Sleep(1000);
}
if (flag==-1)
{
TP = Bid - takeprofit*Point;
SL = Bid + stoploss*Point;
//LOT = LOT(risk,1);
k=OrderSend(Symbol(),OP_SELL,Lots,Bid,2,SL,TP,NULL, Magic,0,CLR_NONE);
if (k<0){Print("Ошибка открытия BUY #",GetLastError());return(0);}
Sleep(1000);
}
/*
if (k<0) //неудачная покупка OK
{
ShowERROR(err);
}
*/
return(0);
}
//--------------------------------------------------------------------
/*
void ShowERROR(int Ticket,double SL,double TP)
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Ticket," ",Symbol());return;
case 3: Alert("Error неправильные параметры Ticket ", Ticket," ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return;
case 134: Alert("Недостаточно денег ", Ticket," ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return;
case 129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return;
case 131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return;
case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
case 4105:Alert("Error Ни один ордер не выбран ", Ticket," ",Symbol());return;
case 4063:Alert("Error Ожидается параметр типа integer ", Ticket," ",Symbol());return;
case 4200:Alert("Error Объект уже существует ", Ticket," ",Symbol());return;
default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return;
}
}
//--------------------------------------------------------------------
bool Check() // Пользов. функция проверки на наличие средств на счету
{
if (IsDemo()==true)
return(true);
}
*/
Осталась одна ошибка, связанная с переменной risk
Спасибо!
А вообще программа хотя бы немного верна? по логике?
почему мы значение magic такое взяли ?
#property copyright "Lazorenko Natalia"
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=false; //для открытия ордера на продажу
extern int takeprofit=100;
extern double Lots=0.1;
extern int stoploss=100;
extern int TrailingStop=35;
extern int Magic = 2563;
double SL,TP;
//double LOT;
//datetime LastTradeTime; // время последней торговой операции//
//--------------------------------------------------------------------
int start()
{
double upper_threshold=70; //верхний порог
double lower_threshold=30; // нижний порог
double price=Bid; //цена
int k;
int flag=0;
if (price > upper_threshold)
{flag=1;}
if (price < lower_threshold)
{flag=-1;}
if (flag==1)
{
TP = Ask + takeprofit*Point;
SL = Ask - stoploss*Point;
//LOT = LOT(risk,1);
k=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP,NULL, Magic,0,CLR_NONE);
if (k<0){Print("Ошибка открытия BUY #",GetLastError());return(0);}
Sleep(1000);
}
if (flag==-1)
{
TP = Bid - takeprofit*Point;
SL = Bid + stoploss*Point;
//LOT = LOT(risk,1);
k=OrderSend(Symbol(),OP_SELL,Lots,Bid,2,SL,TP,NULL, Magic,0,CLR_NONE);
if (k<0){Print("Ошибка открытия BUY #",GetLastError());return(0);}
Sleep(1000);
}
/*
if (k<0) //неудачная покупка OK
{
ShowERROR(err);
}
*/
return(0);
}
//--------------------------------------------------------------------
/*
void ShowERROR(int Ticket,double SL,double TP)
{
int err=GetLastError();
switch ( err )
{
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Ticket," ",Symbol());return;
case 3: Alert("Error неправильные параметры Ticket ", Ticket," ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ", Ticket," ",Symbol());return;
case 134: Alert("Недостаточно денег ", Ticket," ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ", Ticket," ",Symbol());return;
case 129: Alert("Error Неправильная цена ", Ticket," ",Symbol());return;
case 131: Alert("Error Неправильный объем ", Ticket," ",Symbol());return;
case 4051:Alert("Error Недопустимое значение параметра функции ",Ticket," ",Symbol());return;
case 4105:Alert("Error Ни один ордер не выбран ", Ticket," ",Symbol());return;
case 4063:Alert("Error Ожидается параметр типа integer ", Ticket," ",Symbol());return;
case 4200:Alert("Error Объект уже существует ", Ticket," ",Symbol());return;
default: Alert("Error ",err," Ticket ", Ticket," ",Symbol());return;
}
}
//--------------------------------------------------------------------
bool Check() // Пользов. функция проверки на наличие средств на счету
{
if (IsDemo()==true)
return(true);
}
*/
)) а как же проверка средств? закомментировано)
Вы просто не с того начали, начните с учебника https://book.mql4.com/ru/, потом рассмотрите какой-нибудь пример простенького рабочего советника. Сложного тут нет ничего, но необходимы некоторые знания которые не удастся компенсировать желанием, жаждой быстрого профита и т.д.
я эту книжку и читаю )))
и bool Check() нужна же для проверки средств. Как программа будет торговать, если баланс в нуле?
И где же Вы видите там проверку средств на счету?
Там проверка типа счета - демо/не демо. Но суть не в этом. Просто Вам надо еще немного знаний и Вы зря игнорируете учебник. Исправления которые Вам пока внесли один фиг не заставят советник работать. Наводящий вопрос: опишите словами условия открытия сделок?
Расставили пределы.
Если цена заваливает за верхний предел, то продаем, если за нижний, то покупаем. У меня по-моему все так и есть ))
Это хотели услышать? ))
Расставили пределы.
Если цена заваливает за верхний предел, то продаем, если за нижний, то покупаем. У меня по-моему все так и есть ))
Это хотели услышать? ))
О,key. И как часто вы встретите цену "заваливающую" своими абсолютными значениями за:
Можно конечно наверно найти инструмент цена которого будет где-то около этих рамок. Но вот как часто цена этих например акций колебаться от 30 до 70? 1-2 раза за 5-10 лет? Неужели вы пишите советник который возможно, но необязательно откроет 1 сделку? Для какого инструмента Ваш советник?
Эти пороги, скорее всего "подсмотрены" Вами в советнике который сравнивает их с показаниями индикатора-осцилятора меняющего свои показания от 0 до 100.
Возьмите для начала условие открытия по-проще и по-понятнее, например если цена открытия текущего бара больше открытия цены предыдущего бара - покупка, меньше - продажа. Выглядеть это будет так:
и добейтесь работы советника хотя бы с такими условиями.