int y; int totalOrders = 4; datetime toT; // Time of Trade datetime doT; // Day of Trade datetime now = TimeCurrent (); datetime boD=now-now% 86400 ; // Beginning of day
if (AccountProfit()>= profitTarget)
{
for (y= 0 ;y<totalOrders; y++) {
if ( OrderSelect (y, SELECT_BY_POS , MODE_HISTORY )) { toT= OrderOpenTime (); // Time of Trade doT=toT-toT% 86400 ; // Day of Trade. if (doT==boD) { // Time of Trade within Current Day.
for (j= OrdersTotal ()- 1 ;j>= 0 ; j--) { if ( OrderType ()== OP_BUY ) totalOrders++; // Check # of long trades. if ( OrderType ()== OP_SELL ) totalOrders++; // Check # of short trades }
} } }
}
if (totalOrders<MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY; if (totalOrders<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
친애하는 프로코더 여러분,
내 EA에 "하루에 4번의 거래 / 이익 목표에 도달하면 거래 중지" 기능을 구현하고 싶습니다.
최대 거래 한도/이익에 도달하면 EA는 거래를 계속하기 위해 다음날까지 기다려야 합니다.
누군가 내 코드를 검토할 수 있는지 궁금합니다. 여기에 약간의 "뇌가 정지된" 상태가 있으므로 코드
일종의 의사 코드 상태입니다... ;-)
미리 감사합니다!
extern int MaxShortTrades = 2 ;
extern int MaxLongTrades = 2 ;
extern double profitTarget = 300; // Target in Money
// Count Trades per Day.
int y;
int totalOrders = 4;
datetime toT; // Time of Trade
datetime doT; // Day of Trade
datetime now = TimeCurrent ();
datetime boD=now-now% 86400 ; // Beginning of day
if (AccountProfit()>= profitTarget)
{
for (y= 0 ;y<totalOrders; y++)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_HISTORY ))
{
toT= OrderOpenTime (); // Time of Trade
doT=toT-toT% 86400 ; // Day of Trade.
if (doT==boD)
{ // Time of Trade within Current Day.
for (j= OrdersTotal ()- 1 ;j>= 0 ; j--)
{
if ( OrderType ()== OP_BUY ) totalOrders++; // Check # of long trades.
if ( OrderType ()== OP_SELL ) totalOrders++; // Check # of short trades
}
}
}
}
}
if (totalOrders<MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if (totalOrders<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
내역(현재 날짜에 마감된 주문)과 열린 주문을 모두 확인하려면 다음과 같이 시도하십시오.
int totalOrdersLong = 0 , totalOrdersShort = 0 ;
for ( int y= OrdersHistoryTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_HISTORY ))
if ( OrderCloseTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
for ( int y= OrdersTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
if (totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if (totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
안녕 믈라덴
도움을 주셔서 대단히 감사합니다. 이제 이 문제를 처리하는 방법이 더 명확해졌습니다.
"일일 수익 목표"도 확인할 수 있습니까? EA가 50에 가야한다고 가정 해 봅시다.- 하루에 EUR,
일일 목표에 도달하면 거래를 중지하고 다음날 계속됩니다....
아마도 다음과 같습니다.
if ( AccountProfit ()<= profitTarget)
{
datetime today = StringToTime ( TimeToString ( TimeCurrent (), TIME_DATE ));
int totalOrdersLong = 0 , totalOrdersShort = 0 ;
for ( int y= OrdersHistoryTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_HISTORY ))
if ( OrderCloseTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
for ( int y= OrdersTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
if (totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if (totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
}
// Check if Profit Targer for the day is reached, so close all open Opsitions
if ( AccountProfit ()>= profitTarget)
{
if ( OrderSelect (buy_ticket, SELECT_BY_TICKET ))
{
dummyResult= OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage*PipMultiplier,MediumSeaGreen);
Print ( "Error closing Buy #" ,( string ) OrderTicket (), " Error code " ,( string ) GetLastError ());
}
}
else
if (Order==SIGNAL_CLOSESELL && sell_ticket!= 0 )
{
if ( OrderSelect (sell_ticket, SELECT_BY_TICKET ))
{
dummyResult= OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage*PipMultiplier,DarkOrange);
Print ( "Error closing Sell #" ,( string ) OrderTicket (), " Error code " ,( string ) GetLastError ());
}
}
안녕 믈라덴
도움을 주셔서 대단히 감사합니다. 이제 이 문제를 처리하는 방법이 더 명확해졌습니다.
"일일 수익 목표"도 확인할 수 있습니까? EA가 50에 가야한다고 가정 해 봅시다.- 하루에 EUR,
일일 목표에 도달하면 거래를 중지하고 다음날 계속됩니다....
아마도 다음과 같습니다.
if ( AccountProfit ()<= profitTarget)
{
datetime today = StringToTime ( TimeToString ( TimeCurrent (), TIME_DATE ));
int totalOrdersLong = 0 , totalOrdersShort = 0 ;
for ( int y= OrdersHistoryTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_HISTORY ))
if ( OrderCloseTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
for ( int y= OrdersTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
if (totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if (totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
}
// Check if Profit Targer for the day is reached, so close all open Opsitions
if ( AccountProfit ()>= profitTarget)
{
if ( OrderSelect (buy_ticket, SELECT_BY_TICKET ))
{
dummyResult= OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage*PipMultiplier,MediumSeaGreen);
Print ( "Error closing Buy #" ,( string ) OrderTicket (), " Error code " ,( string ) GetLastError ());
}
}
else
if (Order==SIGNAL_CLOSESELL && sell_ticket!= 0 )
{
if ( OrderSelect (sell_ticket, SELECT_BY_TICKET ))
{
dummyResult= OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage*PipMultiplier,DarkOrange);
Print ( "Error closing Sell #" ,( string ) OrderTicket (), " Error code " ,( string ) GetLastError ());
}
}
현재 열려 있는 장단기 주문 번호를 확인 하는 루프에 수익 수집(합산)을 추가하지 않겠습니까?
이 같은 :
double profitSoFarLong= 0 ,profitSoFarShort= 0 ;
for ( int y= OrdersTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) { totalOrdersLong++; profitSoFarLong += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
if ( OrderType ()== OP_SELL ) { totalOrdersShort++; profitSoFarShort += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
}
}
그런 다음 추가 제어를 위해profitSoFarLong 및profitSoFarShort를 사용할 수 있습니다.
추신: 합계를 원할 경우(닫힌 주문과 열린 주문의 경우) 이미 닫힌 주문에도 비슷한 코드를 추가할 수 있습니다.
안녕 믈라덴
저를 위해 "AutoFiboAutoTrend" 표시기를 수정했고 잘 작동합니다. fibo의 방향이 "위"에서 "아래"로 바뀔 때 알림과 함께 오디오 경고를 추가할 수 있습니까? Pls는 이미지 1 + 2를 참조하십시오
레아 감사합니다
현재 열려 있는 장단기 주문 번호를 확인하는 루프에 수익 수집(합산)을 추가하지 않겠습니까?
이 같은 :
double profitSoFarLong= 0 ,profitSoFarShort= 0 ;
for ( int y= OrdersTotal ()- 1 ;y>= 0 ; y--)
{
if ( OrderSelect (y, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) { totalOrdersLong++; profitSoFarLong += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
if ( OrderType ()== OP_SELL ) { totalOrdersShort++; profitSoFarShort += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
}
}
그런 다음 추가 제어를 위해profitSoFarLong 및profitSoFarShort를 사용할 수 있습니다.
추신: 합계를 원할 경우(닫힌 주문과 열린 주문의 경우) 이미 닫힌 주문에도 비슷한 코드를 추가할 수 있습니다.
안녕 믈라덴
도움을 주셔서 대단히 감사합니다!
다음과 같이 코드를 구현했습니다.
datetime today = StringToTime ( TimeToString ( TimeCurrent (), TIME_DATE ));
int totalOrdersLong = 0 , totalOrdersShort = 0 ;
int x;
for (x= OrdersHistoryTotal ()- 1 ;x>= 0 ; x--)
{
if ( OrderSelect (x, SELECT_BY_POS , MODE_HISTORY ))
if ( OrderCloseTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
for (x= OrdersTotal ()- 1 ;x>= 0 ; x--)
{
if ( OrderSelect (x, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) totalOrdersLong++;
if ( OrderType ()== OP_SELL ) totalOrdersShort++;
}
}
double profitSoFarLong= 0 ,profitSoFarShort= 0 ;
for (x= OrdersTotal ()- 1 ;x>= 0 ; x--)
{
if ( OrderSelect (x, SELECT_BY_POS , MODE_TRADES ))
if ( OrderOpenTime ()>=today)
{
if ( OrderType ()== OP_BUY ) { totalOrdersLong++; profitSoFarLong += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
if ( OrderType ()== OP_SELL ) { totalOrdersShort++; profitSoFarShort += OrderProfit ()+ OrderCommission ()+ OrderSwap (); }
}
}
// EA STOP if Profit is Reached.
if (profitSoFarLong> 50 || profitSoFarLong> 50 )
{
if ( OrderType ()== OP_BUY ) { dummyResult = OrderClose ( OrderTicket (), OrderLots (), MarketInfo (s_symbol, MODE_ASK ), 0 ,CLR_NONE); }
if ( OrderType ()== OP_SELL ) { dummyResult = OrderClose ( OrderTicket (), OrderLots (), MarketInfo (s_symbol, MODE_BID ), 0 ,CLR_NONE); }
Print ( "Account Profit Reached. All Open Trades Have Been Closed" );
return ( 0 );
Sleep ( 3600 ); // one hour
}
도와주세요 mladen. 첨부된 EA에서 SLIPPAGE가 작동하지 않습니다.
라지브
Slippage는 OrderSend() 호출 에서 올바른 위치에 있습니다. 코드 사용이 정상이므로 더 큰 값을 사용하고 테스트하십시오.
도와주세요... 모든 내보내기 수단과 함께 "닫을" 때마다 .csv 파일에 쓸 수 있습니다.
코드에서 이 표시기
void RSI_output(string SymbolName,int PeriodMinutes)
{
int size=iBars(SymbolName,PeriodMinutes); if(size==0) return;
int handle=FileOpen(SymbolName+PeriodMinutes+"_RSI.csv",FILE_WRITE|FILE_CSV); if (handle<0)return;
FileWrite(handle,"Time seconds;Time;Open;Low;High;Close;Volume;RSI");
for (int i=size-1;i>=0;i--)
{
FileWrite(handle,iTime(SymbolName,PeriodMinutes,i),TimeToStr(iTime(SymbolName,PeriodMinutes,i))
,iOpen(SymbolName,PeriodMinutes,i),iLow(SymbolName,PeriodMinutes,i),iHigh(SymbolName,PeriodMinutes,i)
,iClose(SymbolName,PeriodMinutes,i),iVolume(SymbolName,PeriodMinutes,i),iCustom(SymbolName,PeriodMinutes,"RSI",0,i));
}
FileClose(handle);
return;
}
int start() { RSI_output(_Symbol,_Period); return(0); }
마우스를 올리지 않고 "닫을" 때마다 .csv 파일에 저장하고 파일을 다시 업데이트하고 싶습니다. .. 매분 한 줄로 파일을 끝내십시오. 예를 들어))))))) PLEASE PLEASE PLEASE. R과의 상호작용을 위한 작업 도구를 주십시오.
도와주세요... 모든 내보내기 수단과 함께 "닫을" 때마다 .csv 파일에 쓸 수 있습니다.
코드에서 이 표시기
void RSI_output(string SymbolName,int PeriodMinutes)
{
int size=iBars(SymbolName,PeriodMinutes); if(size==0) return;
int handle=FileOpen(SymbolName+PeriodMinutes+"_RSI.csv",FILE_WRITE|FILE_CSV); if (handle<0)return;
FileWrite(handle,"Time seconds;Time;Open;Low;High;Close;Volume;RSI");
for (int i=size-1;i>=0;i--)
{
FileWrite(handle,iTime(SymbolName,PeriodMinutes,i),TimeToStr(iTime(SymbolName,PeriodMinutes,i))
,iOpen(SymbolName,PeriodMinutes,i),iLow(SymbolName,PeriodMinutes,i),iHigh(SymbolName,PeriodMinutes,i)
,iClose(SymbolName,PeriodMinutes,i),iVolume(SymbolName,PeriodMinutes,i),iCustom(SymbolName,PeriodMinutes,"RSI",0,i));
}
FileClose(handle);
return;
}
int start() { RSI_output(_Symbol,_Period); return(0); }
마우스를 올리지 않고 "닫을" 때마다 .csv 파일에 저장하고 파일을 다시 업데이트하고 싶습니다. .. 매분 한 줄로 파일을 끝내십시오. 예를 들어))))))) PLEASE PLEASE PLEASE. R과의 상호작용을 위한 작업 도구를 주십시오.
네. 일정에 있는 것의 기록 + 1 막대(& my iCustom 표시기). 파일을 영원히 다시 쓰지 않고 물어보십시오.
다음은 옵션이 있는 버전입니다. 이전 데이터 파일을 다시 작성해야 하거나 새 막대마다 항상 새 파일을 생성해야 합니다.
#property indicator_buffers 0
extern bool RewriteOldData= true ;
void RSI_output( string symbolName, int PeriodMinutes, datetime time)
{
string name = (RewriteOldData) ? symbolName+PeriodMinutes : symbolName+PeriodMinutes+( string )(time/ 60 );
int size = iBars (symbolName,PeriodMinutes); if (size== 0 ) return ;
int handle= FileOpen (name+ "_RSI.csv" , FILE_WRITE | FILE_CSV ); if (handle< 0 ) return ;
FileWrite (handle, "Time seconds;Time;Open;Low;High;Close;Volume;RSI" );
for ( int i=size- 1 ;i>= 0 ;i--)
FileWrite (handle, iTime (symbolName,PeriodMinutes,i), TimeToStr ( iTime (symbolName,PeriodMinutes,i))
, iOpen (symbolName,PeriodMinutes,i), iLow (symbolName,PeriodMinutes,i), iHigh (symbolName,PeriodMinutes,i)
, iClose (symbolName,PeriodMinutes,i), iVolume (symbolName,PeriodMinutes,i), iCustom (symbolName,PeriodMinutes, "RSI" , 0 ,i));
FileFlush (handle);
FileClose (handle);
return ;
}
int start()
{
static datetime lastTime= 0 ;
if (lastTime!= Time [ 0 ]) RSI_output( _Symbol , _Period , Time [ 0 ]);
lastTime= Time [ 0 ];
return ( 0 );
}
이는 표시기이며 RewriteOldData 매개변수 를 설정하고 작동하도록 하기만 하면 됩니다.