묻다! - 페이지 63 1...565758596061626364656667686970...182 새 코멘트 proverbs 2007.06.15 01:30 #621 좋아 피벗 계산을 알아 냈습니다. 도와주셔서 감사합니다. 지금 내가 직면한 문제는 올바른 가격 위치에서 보류 중인 주문 을 올바르게 열 때 가격 조치가 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); } Ask! Donchian trend How to code? proverbs 2007.06.15 03:57 #622 제 이전 포스팅에 대해서, "clear_to_send = false;" 보류 중인 주문 이후에 전환되지 않습니다. 어떤 아이디어? 이것은 내가 피벗을 보류 중인 주문에 대한 참조 기준으로 삼았을 때 발생했습니다. 이 논리를 해결할 수 없으면 표시기에서 피벗을 참조하고 EA에서 호출하는 방법을 알아 내려고 노력할 것입니다. 그것이 가능한지 확실하지 않지만 나는 그것들을 내 옵션으로 봅니다. 모든 조언이나 지원이 평가됩니다. ryanklefas 2007.06.15 04:16 #623 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); } 이 코드를 사용해보십시오. Ask! Donchian trend How to code? proverbs 2007.06.15 17:42 #624 라이언클레파스 , 당신은 단순히 이 분야에서 훌륭합니다. 내가 수정한 테스트가 효과가 있었습니다. 피벗 논리를 추가하면 현재 "If" 논리가 방해받는 이유가 확실하지 않습니다. 아마도 다른 위치에 피벗 코드를 설정해야 할 것입니다. 그러나 보류 중인 주문 코드를 분리한 방법과 지금까지 작동하는 방법을 알 수 있습니다. 코드 예제를 알려주는 URL에 감사드립니다. 그것은 내가 프로그래밍 기술을 향상시킬 때 훌륭한 자원이 될 것입니다. 한 가지 문제를 해결하는 것이 때때로 다른 문제를 일으키는 방식이 흥미롭고/당황스럽습니다. 현재 문제: 이제 이 코드가 3자리가 아닌 5자리 가격에 대한 보류 주문만 허용하는 이유를 알아야 합니다. 예: 1.1234는 제대로 작동하지만 1.12는 1.123333이 OrderSend에 대한 유효한 가격이 아니라는 오류를 표시합니다. 따라서 GBP/USD에서는 작동하지만 USD/JPY에서는 작동하지 않습니다. 시간 내주셔서 다시 한 번 감사드립니다. 엘리트 지표 :) [ARCHIVE] 포럼을 어지럽히 지 Ask! ryanklefas 2007.06.16 08:49 #625 proverbs: 라이언클레파스 , 당신은 이 분야에서 단순히 훌륭합니다. 고맙습니다. 당신의 문제에 관해서: 피벗 값을 orderSend 함수로 보내기 전에 NormalizeDouble 함수 로 정규화했는지 확인하십시오. 두 번째 매개변수로 미리 정의된 값 "Digits"를 사용하여 두 배를 통화에 적절한 숫자로 반올림하십시오. ryanklefas 2007.06.16 08:52 #626 waaustin: 내 문제는 계산된 값을 가장 가까운 소수 자릿수로 반올림하는 방법이었습니다. normalizeDouble 기능 도 도움이 될 것이라고 생각합니다. MathFloor 및 MathCeiling 함수를 사용하여 동일한 작업을 수행하는 코드도 보았습니다. hellkkas 2007.06.16 09:04 #627 또 다른 도움 아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까? 파일: chart.gif 18 kb Sergey Golubev 2007.06.16 09:21 #628 hellkas: 아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까? 이 스레드와 관련이 있다고 생각합니다. https://www.mql5.com/en/forum/176969 highway3000 2007.06.16 14:52 #629 코드에서 레벨 색상 설정 누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까? #속성 표시기_separate_window #속성 표시기_버퍼 1 #property indicator_color1 다저블루 #속성 표시기_레벨1 30 #속성 표시기_레벨2 70 #속성 표시기_최소 0 #속성 표시기_최대 100 미리 감사드립니다 ryanklefas 2007.06.16 21:44 #630 highway3000: 누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까? #속성 표시기_separate_window #속성 표시기_버퍼 1 #property indicator_color1 다저블루 #속성 표시기_레벨1 30 #속성 표시기_레벨2 70 #속성 표시기_최소 0 #속성 표시기_최대 100 미리 감사드립니다 저는 MetaEditor의 이 섹션이 당신이 찾고 있는 것이 될 것이라고 생각합니다: MQL4 참조 - 기본 사항 - 전처리기 - 컴파일 제어 1...565758596061626364656667686970...182 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
좋아 피벗 계산을 알아 냈습니다. 도와주셔서 감사합니다.
지금 내가 직면한 문제는 올바른 가격 위치에서 보류 중인 주문 을 올바르게 열 때 가격 조치가 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에서는 작동하지 않습니다.
시간 내주셔서 다시 한 번 감사드립니다.
라이언클레파스 ,
당신은 이 분야에서 단순히 훌륭합니다.
고맙습니다.
당신의 문제에 관해서:
피벗 값을 orderSend 함수로 보내기 전에 NormalizeDouble 함수 로 정규화했는지 확인하십시오. 두 번째 매개변수로 미리 정의된 값 "Digits"를 사용하여 두 배를 통화에 적절한 숫자로 반올림하십시오.
내 문제는 계산된 값을 가장 가까운 소수 자릿수로 반올림하는 방법이었습니다.
normalizeDouble 기능 도 도움이 될 것이라고 생각합니다. MathFloor 및 MathCeiling 함수를 사용하여 동일한 작업을 수행하는 코드도 보았습니다.
또 다른 도움
아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까?
아무도 나에게 이것을하는 방법을 말해 줄 수 있습니까?
이 스레드와 관련이 있다고 생각합니다. https://www.mql5.com/en/forum/176969
코드에서 레벨 색상 설정
누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까?
#속성 표시기_separate_window
#속성 표시기_버퍼 1
#property indicator_color1 다저블루
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
#속성 표시기_최소 0
#속성 표시기_최대 100
미리 감사드립니다
누군가 레벨 1 30을 녹색으로 설정하고 레벨 2 70을 빨간색으로 설정하는 방법을 알려줄 수 있습니까?
#속성 표시기_separate_window
#속성 표시기_버퍼 1
#property indicator_color1 다저블루
#속성 표시기_레벨1 30
#속성 표시기_레벨2 70
#속성 표시기_최소 0
#속성 표시기_최대 100
미리 감사드립니다저는 MetaEditor의 이 섹션이 당신이 찾고 있는 것이 될 것이라고 생각합니다:
MQL4 참조 - 기본 사항 - 전처리기 - 컴파일 제어