Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй задачу в сервисе Фриланс и разработчики выполнят ее.
Артем
16
Артем 2012.06.27 20:09 

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

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

}

GaryKa
489
GaryKa 2012.06.27 20:19  

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

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

Алексей Тарабанов
7220
Алексей Тарабанов 2012.06.27 20:25  
Время в бары преобразуйте. bar=iBarShift(NULL,0,time)
Артем
16
Артем 2012.06.27 20:33  

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

}

Алексей Тарабанов
7220
Алексей Тарабанов 2012.06.27 20:39  

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

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

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

Артем
16
Артем 2012.06.27 21:02  
tara:

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

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

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


Спасибо tara)
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий