묻다! - 페이지 63

 

좋아 피벗 계산을 알아 냈습니다. 도와주셔서 감사합니다.

지금 내가 직면한 문제는 올바른 가격 위치에서 보류 중인 주문 을 올바르게 열 때 가격 조치가 1핍 이동할 때마다 계속해서 보류 중인 주문을 계속 여는 것입니다.

나는 왜 이런 일이 일어나는지 살펴보았고 계속 연구할 것이지만 내가 하고 있는 논리 오류가 보이면 힌트를 주거나 도움을 줄 수 있는지 알고 싶었습니다.

시간 내주셔서 항상 감사합니다.

extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.

extern int look_price_min = 35; // Offset in minutes when to look on price.

extern int close_hour = 12; // Close all orders after this hour

bool use_close_hour = true; // set it to false to ignore close_hour

int take_profit = 20;

extern int Currency_Spread = 4;

int open_long = 21;

int open_short = 21;

int stop_long = 30;

int stop_short = 30;

extern int slippage = 0;// Put what your brooker requires

extern double lots = 0.20; // Position size

extern int magic = 123;

bool clear_to_send = true;

void ReportStrategy()

{

int totalorders = HistoryTotal();

double StrategyProfit = 0.0;

double StrategyProfitOpen = 0.0;

int StrategyOrders = 0;

int StrategyOrdersOpen = 0;

for(int j=0; j<totalorders;j++)

{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&

(OrderMagicNumber() == magic))

{

if((OrderType() == OP_BUY) ||

(OrderType() == OP_SELL))

{

StrategyOrders++;

StrategyProfit += OrderProfit();

}

}

}

totalorders = OrdersTotal();

for(j=0; j<totalorders;j++)

{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&

(OrderMagicNumber() == magic))

{

if((OrderType() == OP_BUY) ||

(OrderType() == OP_SELL))

{

StrategyOrdersOpen++;

StrategyProfitOpen += OrderProfit();

}

}

}

Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",

StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",

"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));

return;

}

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

ReportStrategy();

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

ReportStrategy();

if(Hour() >= close_hour &&

use_close_hour){

// we are after closing time

int totalorders = OrdersTotal();

for(int j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUY)

OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);

if(OrderType() == OP_SELL)

OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);

if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

OrderDelete(OrderTicket());

}

}

return(0);

}

if(Hour() == look_price_hour &&

Minute() >= look_price_min &&

clear_to_send){

// Probably I need to close any old positions first:

totalorders = OrdersTotal();

for(j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUY)

OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);

if(OrderType() == OP_SELL)

OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);

if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

OrderDelete(OrderTicket());

}

}

}

double PIVOT;

PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;

// Send orders:

OrderSend(Symbol(),

OP_BUYSTOP,

lots,

PIVOT+(open_long+Currency_Spread)*Point, // Spread included

slippage,

PIVOT+((open_long+Currency_Spread)-stop_long)*Point,

PIVOT+((open_long+Currency_Spread)+take_profit)*Point,

NULL,

magic,

0,

FireBrick);

OrderSend(Symbol(),

OP_SELLSTOP,

lots,

PIVOT-open_short*Point,

slippage,

PIVOT-(open_short-stop_short)*Point,

PIVOT-(open_short+take_profit)*Point,

NULL,

magic,

0,

FireBrick);

clear_to_send = false; // mark that orders are sent

if(!clear_to_send){ // there are active orders

int long_ticket = -1;

int short_ticket = -1;

bool no_active_order = true;

totalorders = OrdersTotal();

for(j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUYSTOP)

long_ticket = OrderTicket();

if(OrderType() == OP_SELLSTOP)

short_ticket = OrderTicket();

if(OrderType() == OP_BUY ||

OrderType() == OP_SELL) // Active order

no_active_order = false; }

}

if(short_ticket == -1 && long_ticket != -1)

OrderDelete(long_ticket);

if(long_ticket == -1 && short_ticket != -1)

OrderDelete(short_ticket);

if(long_ticket == -1 && short_ticket == -1 && no_active_order &&

Hour() != look_price_hour && Minute() >= look_price_min)

clear_to_send = true;

if(Hour() == (look_price_hour-1) &&

MathAbs(Minute() - look_price_min) < 10)

clear_to_send = true;

}

//----

return(0);

}

 

제 이전 포스팅에 대해서,

"clear_to_send = false;" 보류 중인 주문 이후에 전환되지 않습니다. 어떤 아이디어?

이것은 내가 피벗을 보류 중인 주문에 대한 참조 기준으로 삼았을 때 발생했습니다. 이 논리를 해결할 수 없으면 표시기에서 피벗을 참조하고 EA에서 호출하는 방법을 알아 내려고 노력할 것입니다. 그것이 가능한지 확실하지 않지만 나는 그것들을 내 옵션으로 봅니다.

모든 조언이나 지원이 평가됩니다.

 

extern int look_price_hour = 1; // Change for your time zone (my is +1 Hour). Should be 9AM London time.

extern int look_price_min = 35; // Offset in minutes when to look on price.

extern int close_hour = 12; // Close all orders after this hour

bool use_close_hour = true; // set it to false to ignore close_hour

int take_profit = 20;

extern int Currency_Spread = 4;

int open_long = 21;

int open_short = 21;

int stop_long = 30;

int stop_short = 30;

extern int slippage = 0;// Put what your brooker requires

extern double lots = 0.20; // Position size

extern int magic = 123;

bool clear_to_send = true;

void ReportStrategy()

{

int totalorders = HistoryTotal();

double StrategyProfit = 0.0;

double StrategyProfitOpen = 0.0;

int StrategyOrders = 0;

int StrategyOrdersOpen = 0;

for(int j=0; j<totalorders;j++)

{ if(OrderSelect(j, SELECT_BY_POS, MODE_HISTORY) &&

(OrderMagicNumber() == magic))

{

if((OrderType() == OP_BUY) ||

(OrderType() == OP_SELL))

{

StrategyOrders++;

StrategyProfit += OrderProfit();

}

}

}

totalorders = OrdersTotal();

for(j=0; j<totalorders;j++)

{ if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES) &&

(OrderMagicNumber() == magic))

{

if((OrderType() == OP_BUY) ||

(OrderType() == OP_SELL))

{

StrategyOrdersOpen++;

StrategyProfitOpen += OrderProfit();

}

}

}

Comment("Daily20Pip EA Executed ", StrategyOrders,"+",StrategyOrdersOpen, " trades with ", StrategyProfit,"+",

StrategyProfitOpen," = ",StrategyProfit+StrategyProfitOpen," of profit\n",

"Server hour: ", TimeHour(CurTime()), " Local hour: ", TimeHour(LocalTime()));

return;

}

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

ReportStrategy();

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

ReportStrategy();

if(Hour() >= close_hour &&

use_close_hour){

// we are after closing time

int totalorders = OrdersTotal();

for(int j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUY)

OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);

if(OrderType() == OP_SELL)

OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);

if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

OrderDelete(OrderTicket());

}

}

return(0);

}

if(Hour() == look_price_hour &&

Minute() >= look_price_min &&

clear_to_send){

// Probably I need to close any old positions first:

totalorders = OrdersTotal();

for(j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUY)

OrderClose(OrderTicket(), OrderLots(), Bid, 0, Red);

if(OrderType() == OP_SELL)

OrderClose(OrderTicket(), OrderLots(), Ask, 0, Red);

if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)

OrderDelete(OrderTicket());

}

}

}

double PIVOT;

PIVOT = (iHigh(NULL,PERIOD_D1,1) + iLow(NULL,PERIOD_D1,1) + iClose(NULL,PERIOD_D1,1))/3;

// Send orders:

if (clear_to_send){

OrderSend(Symbol(),

OP_BUYSTOP,

lots,

PIVOT+(open_long+Currency_Spread)*Point, // Spread included

slippage,

PIVOT+((open_long+Currency_Spread)-stop_long)*Point,

PIVOT+((open_long+Currency_Spread)+take_profit)*Point,

NULL,

magic,

0,

FireBrick);

OrderSend(Symbol(),

OP_SELLSTOP,

lots,

PIVOT-open_short*Point,

slippage,

PIVOT-(open_short-stop_short)*Point,

PIVOT-(open_short+take_profit)*Point,

NULL,

magic,

0,

FireBrick);

clear_to_send = false; // mark that orders are sent

}

if(!clear_to_send){ // there are active orders

int long_ticket = -1;

int short_ticket = -1;

bool no_active_order = true;

totalorders = OrdersTotal();

for(j=0;j<totalorders;j++){

OrderSelect(j, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol()==Symbol() &&

OrderMagicNumber() == magic){

if(OrderType() == OP_BUYSTOP)

long_ticket = OrderTicket();

if(OrderType() == OP_SELLSTOP)

short_ticket = OrderTicket();

if(OrderType() == OP_BUY ||

OrderType() == OP_SELL) // Active order

no_active_order = false; }

}

if(short_ticket == -1 && long_ticket != -1)

OrderDelete(long_ticket);

if(long_ticket == -1 && short_ticket != -1)

OrderDelete(short_ticket);

if(long_ticket == -1 && short_ticket == -1 && no_active_order &&

Hour() != look_price_hour && Minute() >= look_price_min)

clear_to_send = true;

if(Hour() == (look_price_hour-1) &&

MathAbs(Minute() - look_price_min) < 10)

clear_to_send = true;

}

//----

return(0);

}

이 코드를 사용해보십시오.

 

라이언클레파스 ,

당신은 단순히 이 분야에서 훌륭합니다.

내가 수정한 테스트가 효과가 있었습니다.

피벗 논리를 추가하면 현재 "If" 논리가 방해받는 이유가 확실하지 않습니다. 아마도 다른 위치에 피벗 코드를 설정해야 할 것입니다. 그러나 보류 중인 주문 코드를 분리한 방법과 지금까지 작동하는 방법을 알 수 있습니다.

코드 예제를 알려주는 URL에 감사드립니다. 그것은 내가 프로그래밍 기술을 향상시킬 때 훌륭한 자원이 될 것입니다.

한 가지 문제를 해결하는 것이 때때로 다른 문제를 일으키는 방식이 흥미롭고/당황스럽습니다.

현재 문제: 이제 이 코드가 3자리가 아닌 5자리 가격에 대한 보류 주문만 허용하는 이유를 알아야 합니다.

예: 1.1234는 제대로 작동하지만 1.12는 1.123333이 OrderSend에 대한 유효한 가격이 아니라는 오류를 표시합니다.

따라서 GBP/USD에서는 작동하지만 USD/JPY에서는 작동하지 않습니다.

시간 내주셔서 다시 한 번 감사드립니다.

 
proverbs:
라이언클레파스 ,

당신은 이 분야에서 단순히 훌륭합니다.

고맙습니다.

당신의 문제에 관해서:

피벗 값을 orderSend 함수로 보내기 전에 NormalizeDouble 함수 로 정규화했는지 확인하십시오. 두 번째 매개변수로 미리 정의된 값 "Digits"를 사용하여 두 배를 통화에 적절한 숫자로 반올림하십시오.

 
waaustin:
내 문제는 계산된 값을 가장 가까운 소수 자릿수로 반올림하는 방법이었습니다.

normalizeDouble 기능 도 도움이 될 것이라고 생각합니다. MathFloor 및 MathCeiling 함수를 사용하여 동일한 작업을 수행하는 코드도 보았습니다.

 

또 다른 도움

아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까?

파일:
chart.gif  18 kb
 
hellkas:
아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까?

이 스레드와 관련이 있다고 생각합니다. https://www.mql5.com/en/forum/176969

 

코드에서 레벨 색상 설정

누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까?

#속성 표시기_separate_window

#속성 표시기_버퍼 1

#property indicator_color1 다저블루

#속성 표시기_레벨1 30

#속성 표시기_레벨2 70

#속성 표시기_최소 0

#속성 표시기_최대 100

미리 감사드립니다

 
highway3000:
누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까?

#속성 표시기_separate_window

#속성 표시기_버퍼 1

#property indicator_color1 다저블루

#속성 표시기_레벨1 30

#속성 표시기_레벨2 70

#속성 표시기_최소 0

#속성 표시기_최대 100

미리 감사드립니다

저는 MetaEditor의 이 섹션이 당신이 찾고 있는 것이 될 것이라고 생각합니다:

MQL4 참조 - 기본 사항 - 전처리기 - 컴파일 제어