Будет в соответствии с тем что прописано.Скажите пожалуйста будет работать советник если внем прописаны другие периоды в отличии от текущего скажем Н1?
double LOTR()
{
/* Изменение лота если прошлый ордер в истории прибольный или убыточный*/
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
double R = OrderProfit();//Приболь выбанного ордера из истории
double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбранного ордера из истории
if(R>0.0)//Если больше 0,0
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1*2);
else if(R<0.0)//Если меньше 0,0
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1);
}
}
return(_Lot1);//Возваращаем полученный лот
}
1. На кой ... вычисления лота выполнять внутри принта? Может не в курсе, но принты при оптимизации не выполняются.Код:double LOTR() { /* Изменение лота если прошлый ордер в истории прибольный или убыточный*/ for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { double R = OrderProfit();//Приболь выбанного ордера из истории double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбранного ордера из истории if(R>0.0)//Если больше 0,0 Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1*2); else if(R<0.0)//Если меньше 0,0 Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1); } } return(_Lot1);//Возваращаем полученный лот }
а в чём вопрос ?Код:double LOTR() { /* Изменение лота если прошлый ордер в истории прибольный или убыточный*/ for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { double R = OrderProfit();//Приболь выбанного ордера из истории double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбранного ордера из истории if(R>0.0)//Если больше 0,0 Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1*2); else if(R<0.0)//Если меньше 0,0 Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1=_Lot1); } } return(_Lot1);//Возваращаем полученный лот }
Всмысле через боль?а в чём вопрос ?
на первый взгляд, в OrderSelect() не хватает параметра MODE_HISTORY
и действительно, прибыль в некоторых случаях приходит через боль
double LOTR1()
{
/* Изменение лота если прошлый ордер в истории прибольный или убыточный*/
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
double R = OrderProfit();//Приболь выбанного ордера из истории
double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбанного ордера из истории
datetime OP = OrderCloseTime();//Время заткрытия ордера
if(R>0.0 && OP<TimeCurrent())//Если больше 0,0
{
_Lot1=_Lot1*2;//вычисояем новый лот
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1);
}
else
if(R<0.0 && OP<TimeCurrent())//Если меньше 0,0
{
_Lot1=Lot0;//вычисояем новый лот
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1);
}
}
}
return(_Lot1);//Возваращаем полученный лот
}
Условие OP<TimeCurrent() бесполезноКод:double LOTR1() { /* Изменение лота если прошлый ордер в истории прибольный или убыточный*/ for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории { if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер { double R = OrderProfit();//Приболь выбанного ордера из истории double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбанного ордера из истории datetime OP = OrderCloseTime();//Время заткрытия ордера if(R>0.0 && OP<TimeCurrent())//Если больше 0,0 { _Lot1=_Lot1*2;//вычисояем новый лот Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1); } else if(R<0.0 && OP<TimeCurrent())//Если меньше 0,0 { _Lot1=Lot0;//вычисояем новый лот Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1); } } } return(_Lot1);//Возваращаем полученный лот }
Как с этим вариантом? Здравствуйте.
double LOTR1()
{
/* Изменение лота если прошлый ордер в истории прибольный или убыточный*/
datetime TimeLastCloseOrder=0;
for(int y=0; y<= OrdersHistoryTotal()-1; y++)//Начинаем перебор ордеров в истории
{
if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
{
datetime OP = OrderCloseTime();//Время заткрытия ордера
if(TimeLastCloseOrder<OP)
{
TimeLastCloseOrder=OP;
double R = OrderProfit();//Приболь выбанного ордера из истории
double T = OrderTicket();//Тикет с приболью(может и отрицательной) выбанного ордера из истории
if(R>0.0)//Если больше 0,0
{
_Lot1=_Lot1*2;//вычисояем новый лот
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1);
}
else if(R<0.0 && OP<TimeCurrent())//Если меньше 0,0
{
_Lot1=Lot0;//вычисояем новый лот
Print("Тикет ордера =",T,"Приболь ордера =",R,"Лот следующего ордера=",_Lot1);
}
}
}
}
return(_Lot1);//Возваращаем полученный лот
}
в этом смыслеВсмысле через боль?
Приболь ордера
void OnTick()
{
if(OrdersTotal()==0)
{
uo(svecha);
if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)//3 бычие свечи
{
double SL = NormalizeDouble(Ask+StopLoss*Point,Digits);//Стоплос =250
double TP = NormalizeDouble(Bid-TakeProfit*Point,Digits);//Тейкпрофит 500
Print("SL=",SL,"TP=",TP,"Ask=",Ask,"Bid=",Bid);
ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,TP,"S1 sell",Magic,clrNONE);
}
};
}
2022.11.05 16:22:04.941 2004.01.20 00:00:56 Umr3 AUDCAD,H4: SL=0.9927 TP=0.9911 Ask=0.9927 Bid=0.9911
Я понимаю ошибаюсь. До правильного ответа я допру. Я вот чего не понимаю почему стоплос равен аску, а тейкпрофит биду? Хотя не должен быть.
реально 0,0 но почему если я указывал вот это:Похоже StopLoss и TakeProfit равны 0. Пропиши в Print() StopLoss и TakeProfit и посмотри что в них находится.
Ты эти переменные где-то в коде обнулил, напиши так:реально 0,0 но почему если я указывал вот это:
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
Это весь код. Только в этом месете стоплосы применяются и все. Я их не обнулял нигде.Ты эти переменные где-то в коде обнулил, напиши так:
input int StopLoss = 250;//Фиксированный уровень стопа
input int TakeProfit = 500;//Фиксированный уровень профита
//+------------------------------------------------------------------+
//| Umr3.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
sinput string iT_Note_3 = " --== Вводимые значения данных ==-- ";
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
extern int Magic = 677687;//Уникальный магик
extern int Slippage = 10;//Уровень проскльзования
extern double Lot = 0.01;//Установка текущего лота
extern double RISK = 0.01;//Устанавливаемый риск на сделку
//====================================================================
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(MarketInfo(Symbol(),MODE_DIGITS)==5)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==3)
coeff = 10;
StopLoss *= coeff;
TakeProfit*= coeff;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Print(StopLoss);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| User function |
//+------------------------------------------------------------------+
Все лишнее убрал всравно 0 показывает.
А где объявлен coeffЭто весь код. Только в этом месете стоплосы применяются и все. Я их не обнулял нигде.
Код://+------------------------------------------------------------------+ //| Umr3.mq4 | //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict sinput string iT_Note_3 = " --== Вводимые значения данных ==-- "; extern int StopLoss = 250;//Фиксированный уровень стопа extern int TakeProfit = 500;//Фиксированный уровень профита extern int Magic = 677687;//Уникальный магик extern int Slippage = 10;//Уровень проскльзования extern double Lot = 0.01;//Установка текущего лота extern double RISK = 0.01;//Устанавливаемый риск на сделку //==================================================================== //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(MarketInfo(Symbol(),MODE_DIGITS)==5) coeff = 10; if(MarketInfo(Symbol(),MODE_DIGITS)==3) coeff = 10; StopLoss *= coeff; TakeProfit*= coeff; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Print(StopLoss); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| User function | //+------------------------------------------------------------------+ Все лишнее убрал всравно 0 показывает.
прописан так int coeff,intBars;А где объявлен coeff
У меня нет нуля:Это весь код. Только в этом месете стоплосы применяются и все. Я их не обнулял нигде.
sinput string iT_Note_3 = " --== Вводимые значения данных ==-- ";
extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
extern int Magic = 677687;//Уникальный магик
extern int Slippage = 10;//Уровень проскльзования
extern double Lot = 0.01;//Установка текущего лота
extern double RISK = 0.01;//Устанавливаемый риск на сделку
int coeff;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
if(MarketInfo(Symbol(),MODE_DIGITS)==5)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==3)
coeff = 10;
StopLoss *= coeff;
TakeProfit*= coeff;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
Print(StopLoss);
}
//+------------------------------------------------------------------+
Ты переменные здесь не занулил?прописан так int coeff,intBars;