Ребята, посмотрите пожалуйста мою программу. Чего в ней не хватает? или что-то лишнее есть? Как это исправить?Еще не могу определиться какие значения присвоить стоплосу и тейкпрофиту. Объясните мне. - страница 2

 
Figar0:

А вообще ошибок наверно больше чем строк кода. На большинство из них укажет попытка компиляции советника

Да я знаю, поэтому и помощи прошу. Знаний у меня не хватает! Да, и с этим я согласна полностью.

и bool Check() нужна же для проверки средств. Как программа будет торговать, если баланс в нуле?

 
#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);
}
*/
 
Vinin:

Осталась одна ошибка, связанная с переменной risk


Спасибо!

А вообще программа хотя бы немного верна? по логике?

почему мы значение magic такое взяли ?

 
VOLDEMAR:
вы бы как более опытный вставляли текст через SRC
 
VOLDEMAR:
#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);
}
*/

)) а как же проверка средств? закомментировано)
 
Figar0:

Вы просто не с того начали, начните с учебника https://book.mql4.com/ru/, потом рассмотрите какой-нибудь пример простенького рабочего советника. Сложного тут нет ничего, но необходимы некоторые знания которые не удастся компенсировать желанием, жаждой быстрого профита и т.д.

я эту книжку и читаю )))
 
funnynatka:

и bool Check() нужна же для проверки средств. Как программа будет торговать, если баланс в нуле?


И где же Вы видите там проверку средств на счету?

bool Check() // Пользов. функция проверки на наличие средств на счету

{

if (IsDemo()==true) 

return(true);

}

Там проверка типа счета - демо/не демо. Но суть не в этом. Просто Вам надо еще немного знаний и Вы зря игнорируете учебник. Исправления которые Вам пока внесли один фиг не заставят советник работать. Наводящий вопрос: опишите словами условия открытия сделок?

 

Расставили пределы.

Если цена заваливает за верхний предел, то продаем, если за нижний, то покупаем. У меня по-моему все так и есть ))

Это хотели услышать? ))

 
funnynatka:

Расставили пределы.

Если цена заваливает за верхний предел, то продаем, если за нижний, то покупаем. У меня по-моему все так и есть ))

Это хотели услышать? ))


О,key. И как часто вы встретите цену "заваливающую" своими абсолютными значениями за:

double upper_threshold=70; //верхний порог
 double lower_threshold=30; // нижний порог
 double price=Bid; //цена
 

Можно конечно наверно найти инструмент цена которого будет где-то около этих рамок. Но вот как часто цена этих например акций колебаться от 30 до 70? 1-2 раза за 5-10 лет? Неужели вы пишите советник который возможно, но необязательно откроет 1 сделку? Для какого инструмента Ваш советник?

Эти пороги, скорее всего "подсмотрены" Вами в советнике который сравнивает их с показаниями индикатора-осцилятора меняющего свои показания от 0 до 100.

Возьмите для начала условие открытия по-проще и по-понятнее, например если цена открытия текущего бара больше открытия цены предыдущего бара - покупка, меньше - продажа. Выглядеть это будет так:

if (Open[0]>Open[1]) flag= 1;
if (Open[0]<Open[1]) flag=-1;
и добейтесь работы советника хотя бы с такими условиями.
 
С проверкой средсв ??? Можно только кусок надо писать у вас нет ничего по проверке средств !!!!   Это можно запросить через Marketinfo .........
Причина обращения: