Помогите новичку

 

Я провожу прямую по четырем координатам:

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();

}

 

Покажите на скрине торгового терминала что вы хотите получить. Пока понятно что чертите два трендовых луча.

P.S. Код тоже можно отформатировать, так легче читать

 
Время в бары преобразуйте. bar=iBarShift(NULL,0,time)
 

Тут не весь код. Я хочу торговать внутри канала, для этого провожу две прямые в торговом терминале(смотрю их координаты, далее копирую их в код) в итоге надо вычислить цену воображаемых прямых, чтобы сравнивать с ценной, и когда ценна сравняется с нижней линией то купить, 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). Вам обстоятельно и квалифицированно ответят и помогут.

А первопричину Вашей проблемы я уже обозначил.

 
tara:

Артем, для начала освойте кнопки, позволяющие включать в текст сообщения код, рисунки и т.п. Вы ведь не хотите, чтобы я выдал Вам свой вариант кода в том же виде, что и Ваш :)

После - перенесите свой вопрос в тему для вопросов новичков(https://www.mql5.com/ru/forum/138609). Вам обстоятельно и квалифицированно ответят и помогут.

А первопричину Вашей проблемы я уже обозначил.


Спасибо tara)
Причина обращения: