Покажите на скрине торгового терминала что вы хотите получить. Пока понятно что чертите два трендовых луча.
P.S. Код тоже можно отформатировать, так легче читать
Тут не весь код. Я хочу торговать внутри канала, для этого провожу две прямые в торговом терминале(смотрю их координаты, далее копирую их в код) в итоге надо вычислить цену воображаемых прямых, чтобы сравнивать с ценной, и когда ценна сравняется с нижней линией то купить, c верхней продать.
Вычисляется неправильно ценна воображаемой прямой, соответственно неправильно сравнивает и открывает.(ошибка именно в вычислении)
вот весь код:
extern double StopLoss =2500; // SL ??? ???????????? ??????
extern double TakeProfit =2500; // ?? ??? ???????????? ??????
extern double Lots =0.01; // ?????? ???????? ?????. ?????
extern double Prots =0.07; // ??????? ????????? ???????
color Col_C=Green; //верхняя линия
extern datetime T11=D'2012.05.07 16:00';
extern datetime T22=D'2012.05.30 04:00';
extern double prv1=1.30643;
extern double prv2=1.24803;
color Col_Cn=Red; //Нижняя линия
extern datetime T1=D'2012.05.04 16:00';
extern datetime T2=D'2012.05.29 04:00';
extern double prn1=1.302242;
extern double prn2=1.243842;
bool Work=true; // ??????? ????? ????????.
string Symb; // ???????? ??????. ???????????
int init()
{
//----
Create1();
Create2();
//----
return(0);
}
//
int deinit()
{
//----
ObjectDelete("OBJ_TREND1");
ObjectDelete("OBJ_TREND2");
//----
return(0);
}
//--------------------------------------------------------------- 2 --
int start()
{
int
Total, // ?????????? ??????? ? ????
Tip=-1, // ??? ??????. ?????? (B=0,S=1)
Ticket; // ????? ??????
double
Lot, // ?????. ????? ? ??????.??????
Lts, // ?????. ????? ? ??????.??????
Min_Lot, // ??????????? ?????????? ?????
Step, // ??? ????????? ??????? ????
Free, // ??????? ????????? ????????
One_Lot, // ????????? ?????? ????
Price, // ???? ?????????? ??????
SL, // SL ?????????? ??????
TP; // TP ?????????? ??????
bool
Ans =false, // ????? ??????? ????? ????????
Cls_B=false, // ???????? ??? ???????? Buy
Cls_S=false, // ???????? ??? ???????? Sell
Opn_B=false, // ???????? ??? ???????? Buy
Opn_S=false; // ???????? ??? ???????? Sell
//--------------------------------------------------------------- 3 --
if(Work==false) // ??????????? ??????
{
Alert("??????????? ??????. ??????? ?? ????????.");
return; // ????? ?? start()
}
//--------------------------------------------------------------- 4 --
// ???? ???????
Symb=Symbol(); // ???????? ???.?????.
Total=0; // ?????????? ???????
for(int i=1; i<=OrdersTotal(); i++) // ???? ???????? ?????
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // ???? ???? ?????????
{ // ?????? ???????:
if (OrderSymbol()!=Symb)continue; // ?? ??? ???. ???????
if (OrderType()>1) // ??????? ??????????
{
Alert("????????? ?????????? ?????. ??????? ?? ????????.");
return; // ????? ?? start()
}
Total++; // ??????? ??????. ???
if (Total>1) // ?? ????? ?????? ???
{
Alert("????????? ???????? ???????. ??????? ?? ????????.");
return; // ????? ?? start()
}
Ticket=OrderTicket(); // ????? ???????. ???.
Tip =OrderType(); // ??? ?????????? ???.
Price =OrderOpenPrice(); // ???? ???????. ???.
SL =OrderStopLoss(); // SL ?????????? ???.
TP =OrderTakeProfit(); // TP ?????????? ???.
Lot =OrderLots(); // ?????????? ?????
}
}
//--------------------------------------------------------------- 5 --
RefreshRates();
datetime x9=Time[0];
double k5=(prv1-prv2)/(T11-T22);
double b5=prv2-k5*T22;
double Cv=k5*x9+b5;
double r5=(prn1-prn2)/(T1-T2);
double t5=prn2-r5*T2;
double Cn=r5*x9+t5;
if(Bid>Cv)
{
Opn_S=true;
}
if((Bid)>Cv)
{
Cls_B=true;
}
if(Ask<Cn)
{
Opn_B=true;
}
if((Ask)<Cn)
{
Cls_S=true;
}
//--------------------------------------------------------------- 6 --
// ???????? ???????
while(true) // ???? ???????? ???.
{
if (Tip==0 && Cls_B==true) // ?????? ????? Buy..
{ //? ???? ???????? ????
Alert("??????? ??????? Buy ",Ticket,". ???????? ??????..");
RefreshRates(); // ?????????? ??????
Ans=OrderClose(Ticket,Lot,Bid,2); // ???????? Buy
if (Ans==true) // ?????????? :)
{
Alert ("?????? ????? Buy ",Ticket);
break; // ????? ?? ????? ????
}
if (Fun_Error(GetLastError())==1) // ????????? ??????
continue; // ????????? ???????
return; // ????? ?? start()
}
if (Tip==1 && Cls_S==true) // ?????? ????? Sell..
{ // ? ???? ???????? ????
Alert("??????? ??????? Sell ",Ticket,". ???????? ??????..");
RefreshRates(); // ?????????? ??????
Ans=OrderClose(Ticket,Lot,Ask,2); // ???????? Sell
if (Ans==true) // ?????????? :)
{
Alert ("?????? ????? Sell ",Ticket);
break; // ????? ?? ????? ????
}
if (Fun_Error(GetLastError())==1) // ????????? ??????
continue; // ????????? ???????
return; // ????? ?? start()
}
break; // ????? ?? while
}
//--------------------------------------------------------------- 7 --
// ????????? ???????
RefreshRates(); // ?????????? ??????
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // ?????. ?????. ?????
Free =AccountFreeMargin(); // ??????? ????????
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// ????????? 1 ????
Step =MarketInfo(Symb,MODE_LOTSTEP); // ??? ??????? ???????
if (Lots > 0) // ???? ?????? ????,??
Lts =Lots; // ? ???? ? ????????
else // % ????????? ???????
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// ??? ????????
if(Lts < Min_Lot) Lts=Min_Lot; // ?? ?????? ?????????
if (Lts*One_Lot > Free) // ??? ?????? ???????.
{
Alert(" ?? ??????? ????? ?? ", Lts," ?????");
return; // ????? ?? start()
}
//--------------------------------------------------------------- 8 --
// ???????? ???????
while(true) // ???? ???????? ???.
{
if (Total==0 && Opn_B==true) // ???????? ???. ??? +
{ // ???????? ????. Buy
RefreshRates(); // ?????????? ??????
SL=Bid - New_Stop(StopLoss)*Point; // ?????????? SL ????.
TP=Bid + New_Stop(TakeProfit)*Point; // ?????????? TP ????.
Alert("??????? ??????? Buy. ???????? ??????..");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//???????? Buy
if (Ticket > 0) // ?????????? :)
{
Alert ("?????? ????? Buy ",Ticket);
return; // ????? ?? start()
}
if (Fun_Error(GetLastError())==1) // ????????? ??????
continue; // ????????? ???????
return; // ????? ?? start()
}
if (Total==0 && Opn_S==true) // ???????? ???. ??? +
{ // ???????? ????. Sell
RefreshRates(); // ?????????? ??????
SL=Ask + New_Stop(StopLoss)*Point; // ?????????? SL ????.
TP=Ask - New_Stop(TakeProfit)*Point; // ?????????? TP ????.
Alert("??????? ??????? Sell. ???????? ??????..");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//???????? Sel
if (Ticket > 0) // ?????????? :)
{
Alert ("?????? ????? Sell ",Ticket);
return; // ????? ?? start()
}
if (Fun_Error(GetLastError())==1) // ????????? ??????
continue; // ????????? ???????
return; // ????? ?? start()
}
break; // ????? ?? while
}
//--------------------------------------------------------------- 9 --
return; // ????? ?? start()
}
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error) // ?-?? ??????? ??????
{
switch(Error)
{ // ??????????? ??????
case 4: Alert("???????? ?????? ?????. ??????? ??? ???..");
Sleep(3000); // ??????? ???????
return(1); // ????? ?? ???????
case 135:Alert("???? ??????????. ??????? ??? ???..");
RefreshRates(); // ??????? ??????
return(1); // ????? ?? ???????
case 136:Alert("??? ???. ???? ????? ???..");
while(RefreshRates()==false) // ?? ?????? ????
Sleep(1); // ???????? ? ?????
return(1); // ????? ?? ???????
case 137:Alert("?????? ?????. ??????? ??? ???..");
Sleep(3000); // ??????? ???????
return(1); // ????? ?? ???????
case 146:Alert("?????????? ???????? ??????. ??????? ???..");
Sleep(500); // ??????? ???????
return(1); // ????? ?? ???????
// ??????????? ??????
case 2: Alert("????? ??????.");
return(0); // ????? ?? ???????
case 5: Alert("?????? ?????? ?????????.");
Work=false; // ?????? ?? ????????
return(0); // ????? ?? ???????
case 64: Alert("???? ????????????.");
Work=false; // ?????? ?? ????????
return(0); // ????? ?? ???????
case 133:Alert("???????? ?????????.");
return(0); // ????? ?? ???????
case 134:Alert("???????????? ????? ??? ?????????? ????????.");
return(0); // ????? ?? ???????
default: Alert("???????? ?????? ",Error); // ?????? ????????
return(0); // ????? ?? ???????
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // ???????? ????-????.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// ?????. ?????????
if (Parametr < Min_Dist) // ???? ?????? ??????.
{
Parametr=Min_Dist; // ????????? ??????.
Alert("????????? ????????? ????-???????.");
}
return(Parametr); // ??????? ????????
}
int Create2()
{
ObjectCreate("OBJ_TREND2",OBJ_TREND,0,T11,prv1,T22,prv2);// Создание объ.
ObjectSet( "OBJ_TREND2", OBJPROP_COLOR, Col_C); // ????
ObjectSet( "OBJ_TREND2", OBJPROP_RAY, true); // ???
ObjectSet( "OBJ_TREND2", OBJPROP_STYLE, STYLE_SOLID);// ?????
WindowRedraw();
}
int Create1()
{
ObjectCreate("OBJ_TREND1",OBJ_TREND,0,T1,prn1,T2,prn2);// Создание объ.
ObjectSet( "OBJ_TREND1", OBJPROP_COLOR, Col_Cn); // ????
ObjectSet( "OBJ_TREND1", OBJPROP_RAY, true); // ???
ObjectSet( "OBJ_TREND1", OBJPROP_STYLE, STYLE_SOLID);// ?????
WindowRedraw();
}
Артем, для начала освойте кнопки, позволяющие включать в текст сообщения код, рисунки и т.п. Вы ведь не хотите, чтобы я выдал Вам свой вариант кода в том же виде, что и Ваш :)
После - перенесите свой вопрос в тему для вопросов новичков(https://www.mql5.com/ru/forum/138609). Вам обстоятельно и квалифицированно ответят и помогут.
А первопричину Вашей проблемы я уже обозначил.
Артем, для начала освойте кнопки, позволяющие включать в текст сообщения код, рисунки и т.п. Вы ведь не хотите, чтобы я выдал Вам свой вариант кода в том же виде, что и Ваш :)
После - перенесите свой вопрос в тему для вопросов новичков(https://www.mql5.com/ru/forum/138609). Вам обстоятельно и квалифицированно ответят и помогут.
А первопричину Вашей проблемы я уже обозначил.
Спасибо tara)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я провожу прямую по четырем координатам:
extern datetime T11=D'2012.05.07 16:00';
extern datetime T22=D'2012.05.30 04:00';
extern double prv1=1.30643;
extern double prv2=1.24803;
Задача найти Цену в данный момент времени.Вроде все легко, надо решить Систему уравнений прямых double Cv=(prv2-prv1)/(T22-T11)*(TimeCurrent()-T11)+prv1;
но вычисленная цена не совпадает с нарисованной прямой на графике.Подскажите пожалуйста в чем тут дело.
Вот весь код.
color Col_Cn=Red; //Нижняя линия
extern datetime T1=D'2012.05.03 20:00';
extern datetime T2=D'2012.05.11 10:00';
extern double prn1=1.301871;
extern double prn2=1.285619;
color Col_C=Green; //верхняя линия
extern datetime T11=D'2012.05.07 16:00';
extern datetime T22=D'2012.05.30 04:00';
extern double prv1=1.30643;
extern double prv2=1.24803;
int init()
{
//----
Create1();
Create2();
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("OBJ_TREND1");
ObjectDelete("OBJ_TREND2");
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
bool opnv=false;
bool opnn=false;
//----
double Cv=(prv2-prv1)/(T22-T11)*(TimeCurrent()-T11)+prv1;
double Cn=(prn2-prn1)/(T2-T1)*(TimeCurrent()-T1)+prn1;
if(Bid>=Cv)
{
opnv=true;
Alert("it good");
}else
{
Alert("nottt good");
}
if(Ask<=Cn)
{
opnn=true;
Alert("good");
}else
{
Alert("nottt good");
}
//----
return(0);
}
//+------------------------------------------------------------------+
int Create2()
{
ObjectCreate("OBJ_TREND2",OBJ_TREND,0,T11,prv1,T22,prv2);// Создание объ.
ObjectSet( "OBJ_TREND2", OBJPROP_COLOR, Col_C); // ????
ObjectSet( "OBJ_TREND2", OBJPROP_RAY, true); // ???
ObjectSet( "OBJ_TREND2", OBJPROP_STYLE, STYLE_SOLID);// ?????
WindowRedraw();
}
int Create1()
{
ObjectCreate("OBJ_TREND1",OBJ_TREND,0,T1,prn1,T2,prn2);// Создание объ.
ObjectSet( "OBJ_TREND1", OBJPROP_COLOR, Col_Cn); // ????
ObjectSet( "OBJ_TREND1", OBJPROP_RAY, true); // ???
ObjectSet( "OBJ_TREND1", OBJPROP_STYLE, STYLE_SOLID);// ?????
WindowRedraw();
}