inputbool UseDateFrom = false ; // Указывать дату начала inputdatetime DateFrom= 0 ; // Дата начала inputbool UseDateTo= false ; // Указывать дату окончания inputdatetime DateTo= 0 ; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart (){
datetime from,to;
if (UseDateFrom){ from=DateFrom; } else { from= 0 ; }
if (UseDateTo){ to=DateTo; } else { to= TimeCurrent (); }
표시기 경고가 왔는지 조언자로부터 어떻게 결정합니까?
알림이 필요하세요?
일반적으로 경고와 함께 일부 신호가 버퍼에 기록됩니다. 그렇다면 버퍼에서 값을 읽어야 합니다.
그러나 더 정확한 코드를 볼 필요가 있습니다. 또는 경고가 있는 막대에 표시기 값이 있는 ctrl+D 데이터 창 .
해당 기사의 부록에서는 sHistoryExport.mq5라고 합니다. 내 컴파일러는 이름이 "HistoryDeal.."로 시작하고 식별자가 "DEAL_.."로 시작하는 함수를 허용하지 않습니다. 코드는 다음과 같습니다.
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false ; // Указывать дату начала
input datetime DateFrom= 0 ; // Дата начала
input bool UseDateTo= false ; // Указывать дату окончания
input datetime DateTo= 0 ; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart (){
datetime from,to;
if (UseDateFrom){
from=DateFrom;
}
else {
from= 0 ;
}
if (UseDateTo){
to=DateTo;
}
else {
to= TimeCurrent ();
}
if (! HistorySelect (from,to)){
Alert ( "Ошибка выделение истории" );
return ;
}
string FileName= "history.csv" ;
int h= FileOpen (FileName, FILE_WRITE | FILE_ANSI | FILE_CSV , ";" );
if (h== INVALID_HANDLE ){
Alert ( "Ошибка открытия файла" );
return ;
}
// первая строка, что бы знать, где что находится
FileWrite (h, "Time" , "Deal" , "Order" , "Symbol" , "Type" , "Direction" , "Volume" , "Price" , "Comission" , "Swap" , "Profit" , "Comment" );
// по всем сделкам
for ( int i= 0 ;i< HistoryDealsTotal ();i++){
ulong ticket= HistoryDealGetTicket (i);
if (ticket!= 0 ){
long type= HistoryDealGetInteger (ticket, DEAL_TYPE );
if (type== DEAL_TYPE_BUY || type== DEAL_TYPE_SELL ){
long entry= HistoryDealGetInteger (ticket, DEAL_ENTRY );
FileWrite (h,( datetime ) HistoryDealGetInteger (ticket, DEAL_TIME ),
ticket,
HistoryDealGetInteger (ticket, DEAL_ORDER ),
HistoryDealGetString (ticket, DEAL_SYMBOL ),
(type== DEAL_TYPE_BUY ? "buy" : "sell" ),
(entry== DEAL_ENTRY_IN ? "in" :(entry== DEAL_ENTRY_OUT ? "out" : "in/out" )),
DoubleToString ( HistoryDealGetDouble (ticket, DEAL_VOLUME ), 2 ),
HistoryDealGetDouble (ticket, DEAL_PRICE ),
DoubleToString ( HistoryDealGetDouble (ticket, DEAL_COMMISSION ), 2 ),
DoubleToString ( HistoryDealGetDouble (ticket, DEAL_SWAP ), 2 ),
DoubleToString ( HistoryDealGetDouble (ticket, DEAL_PROFIT ), 2 ),
HistoryDealGetString (ticket, DEAL_COMMENT )
);
}
}
else {
Alert ( "Ошибка выделения сделки, повторите попытку" );
FileClose (h);
return ;
}
}
FileClose (h);
Alert ( "Сохранение выполнено, см. файл " +FileName);
}
//+------------------------------------------------------------------+
글쎄요, 솔직히 말해서 아예 확인도 안하고 - MT4 거래 이력도 손에 없어요 - 그냥 드미트리의 대본을 보고 "무릎 꿇고"라고 썼는데...
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false ; // Указывать дату начала
input datetime DateFrom= 0 ; // Дата начала
input bool UseDateTo= false ; // Указывать дату окончания
input datetime DateTo= 0 ; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart (){
//---
datetime from,to;
if (UseDateFrom) from=DateFrom;
else from= 0 ;
if (UseDateTo) to=DateTo;
else to= TimeCurrent ();
//---
string FileName= "history.csv" ;
int h= FileOpen (FileName, FILE_WRITE | FILE_ANSI | FILE_CSV , ";" );
if (h== INVALID_HANDLE ){
Alert ( "Ошибка открытия файла" );
return ;
}
//--- первая строка, что бы знать, где что находится
FileWrite (h, "OpenTime" , "CloseTime" , "Ticket" , "Symbol" , "Type" , "Volume" , "OpenPrice" , "ClosePrice" , "Comission" , "Swap" , "Profit" , "Comment" );
//--- по всем сделкам
for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
if ( OrderOpenTime ()<from) continue ;
if ( OrderOpenTime ()>to) break ;
int type= OrderType ();
if (type> OP_SELL ) continue ;
int dg=( int ) SymbolInfoInteger ( OrderSymbol (), SYMBOL_DIGITS );
int ticket= OrderTicket ();
FileWrite (h,( datetime ) OrderOpenTime (),
( datetime ) OrderCloseTime (),
ticket,
OrderSymbol (),
(type== OP_BUY ? "buy" : "sell" ),
DoubleToString ( OrderLots (), 2 ),
DoubleToString ( OrderOpenPrice (),dg),
DoubleToString ( OrderClosePrice (),dg),
DoubleToString ( OrderCommission (), 2 ),
DoubleToString ( OrderSwap (), 2 ),
DoubleToString ( OrderProfit (), 2 ),
OrderComment ()
);
}
else {
Alert ( "Ошибка выделения сделки, повторите попытку" );
FileClose (h);
return ;
}
}
//---
FileClose (h);
Alert ( "Сохранение выполнено, см. файл " +FileName);
}
//+------------------------------------------------------------------+
설명 감사합니다, Artem!
하지만 질문이 하나 더 있습니다.
때때로 고문은 SL이 실행된 직후에 주문을 엽니다. 따라서 그는 하나의 양초에 전체 저장소를 비울 수 있습니다.
현재 주문을 마감한 후 다음 주문을 열 때 지연을 설정하는 방법은 무엇입니까? 지연 시간은 캔들 시간과 같아야 하며 자동으로 계산됩니다.
고맙습니다!
설명 감사합니다, Artem!
하지만 질문이 하나 더 있습니다.
때때로 고문은 SL이 실행된 직후에 주문을 엽니다. 따라서 그는 하나의 양초에 전체 저장소를 비울 수 있습니다.
현재 주문을 마감한 후 다음 주문을 열 때 지연을 설정하는 방법은 무엇입니까? 지연 시간은 캔들 시간과 같아야 하며 자동으로 계산됩니다.
고맙습니다!
논리는 이렇습니다.
글쎄요, 솔직히 말해서 아예 확인도 안하고 - MT4 거래 이력도 손에 없어요 - 그냥 드미트리의 대본을 보고 "무릎 꿇고"라고 썼는데...
공장. 언뜻 보기엔 다 정상인 것 같고, 여는/닫는 날짜만 다른데 쓰는 방법은 제가 알고 있습니다. 정말 감사합니다.
세 번째 빌드에서 이 어드바이저를 도와주세요. 작동했지만 지금은 아닙니다!!!!
어떤 도움이 필요합니까? 스스로 뭔가를 할 수 없습니까?
여기에 도움과 토론이 있지만 욕망의 무상 충족은 아닙니다.
어떤 도움이 필요합니까? 스스로 뭔가를 할 수 없습니까?
여기에 도움과 토론이 있지만 욕망의 무상 충족은 아닙니다.
나는 무엇이 잘못되었는지 이해하지 못한다?