if (!res1) return false; //сейчас торговать запрещено if (res1 && res2) return true; //и сейчас и через час торговать можно return false; //если зависло разрешение от TimeCurrent, то через час (или с запасом в несколько минут) покажет фалсе. // Но наверняка есть ситуации когда реально сейчас можно торговать а через час нельзя - тогда неправильный ответ :( }
난 동의하지 않는다. 화면에 고정된 마지막 날짜는 금요일 21:59입니다. 시프트를 3600초로 설정하면 두 번째 매개변수 IsTradeAllowed(Symbol(), TimeCurrent()+3600) 가 true를 반환합니다. 작동을 위해 몇 초의 여유 시간을 추가했습니다. 글쎄, 금요일 21:50이면 모든 것이 일하다.
하지만 솔직히 제어하지 않고 주말 동안 지속적으로 다시 연결되는 Reconnector 브로커(포럼 어딘가에서 찾았습니다)에 대한 연결을 확인했습니다. 그래서 그것은 나에게 중요하지 않습니다.
/// Ждём разрешения торговатьvoid TradeAllowed()
{
symb=Symbol();/// Текущий символ или символ на котором нужно произвести проверкуif(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
{Print("Automated trading is forbidden at the trade server side");return;}
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
{Print("Trading is forbidden!");return;}
if (!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
{Print("Check if automated trading is allowed in the terminal settings!");return;}
if(!IsTradeAllowed(symb,TimeLocal())
{Print("Trading on the symbol "+symb+" is forbidden!");return;}
while(IsTradeContextBusy())
{
if(IsStopped()) {Print("Forced shutdown ");break;}
Print("Trading is occupied. Wait.");
Sleep(1000);
RefreshRates();
}
}
//------------------------------------------------------------------ IsSessionOpen bool IsSessionOpen(string smb) { //MqlDateTime dt; datetime tc=TimeTradeServer(dt); datetime tc= TimeCurrent(); // проверяем время торгов по инструменту datetime t=(datetime)SymbolInfoInteger(smb, SYMBOL_EXPIRATION_TIME); if (tc>t && t>0) return(false); t=(datetime)SymbolInfoInteger(smb, SYMBOL_START_TIME); if (tc<t && t>0) return(false);
// проверяем сессии инструмента datetime ds=tc/(60*60*24); ds*=(60*60*24); // начало сегодня datetime sec=tc-ds; // число секунд от начала дня bool b=false; for (int l=0; l<10; l++) // подразумеваем, что админ сделал не более 10 сессий в сутки { datetime fs, ts; if (!SymbolInfoSessionTrade(smb, TimeDayOfWeek(TimeCurrent()), l, fs, ts)) break; // данные сессии if (sec>=fs && sec<=ts) return(true); } return(false); }
자신을 속이고 속이고 싶은 이 끈질긴 욕망 :) .
추가됨: "시장 감시" 창에서 모든 기호를 표시하고 "시간" 열을 표시하고 일주일에 7일 거래되는 비트코인 기호를 찾으려고 했습니까? 또한 이 기본 점검은 다음과 같은 도움도 줍니다.
보편적 인 솔루션은 아니지만 저에게 효과적입니다.
bool CanTrade()
{
bool res1=IsTradeAllowed(Symbol(), TimeCurrent());
bool res2=IsTradeAllowed(Symbol(), TimeCurrent()+4000); //с запасом,
if (!res1) return false; //сейчас торговать запрещено
if (res1 && res2) return true; //и сейчас и через час торговать можно
return false; //если зависло разрешение от TimeCurrent, то через час (или с запасом в несколько минут) покажет фалсе.
// Но наверняка есть ситуации когда реально сейчас можно торговать а через час нельзя - тогда неправильный ответ :(
}
그러나 지금은 실제로 거래할 수 있고 한 시간 후에는 거래할 수 없는 상황이 분명히 있습니다.
물론 시장이 닫히기 1시간 전))))
난 동의하지 않는다. 화면에 고정된 마지막 날짜는 금요일 21:59입니다. 시프트를 3600초로 설정하면 두 번째 매개변수 IsTradeAllowed(Symbol(), TimeCurrent()+3600) 가 true를 반환합니다. 작동을 위해 몇 초의 여유 시간을 추가했습니다. 글쎄, 금요일 21:50이면 모든 것이 일하다.
하지만 솔직히 제어하지 않고 주말 동안 지속적으로 다시 연결되는 Reconnector 브로커(포럼 어딘가에서 찾았습니다)에 대한 연결을 확인했습니다. 그래서 그것은 나에게 중요하지 않습니다.
bool MarketOpen(string Symbl)
{
if(IsTradeAllowed(Symbl,TimeCurrent()+1)==false)return(false); //рынок закрыт
return(true);
}
bool MarketOpen(string Symbl)
{
if(IsTradeAllowed(Symbl,TimeCurrent()+1)==false)return(false); //рынок закрыт
return(true);
}
그것은 다르게 발생하므로 그러한 검사는 아무 것도 보장하지 않습니다.
토비시, 전문가 거래는 금지되지만 시장은 열려 있습니다.
바로 지금, 월요일, 시장이 열리고 전문가들은 사무실에서 금지됩니다.
반대로 주말 에 시장이 닫히는 다른 사무실에서는 이러한 확인이 시장이 열려 있고 전문가에게 거래 허가가 부여되었음을 나타냅니다.
어제 고생했다
작동하는 동안
이제 사라졌습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
주말에는 거래가 없다는 것을 어떻게 알 수 있습니까?
레나트 아크티아모프 , 2018.02.11 05:27
감사하다!
MT4의 경우
bool IsSessionOpen(string smb)
{
//MqlDateTime dt; datetime tc=TimeTradeServer(dt);
datetime tc= TimeCurrent();
// проверяем время торгов по инструменту
datetime t=(datetime)SymbolInfoInteger(smb, SYMBOL_EXPIRATION_TIME);
if (tc>t && t>0) return(false);
t=(datetime)SymbolInfoInteger(smb, SYMBOL_START_TIME);
if (tc<t && t>0) return(false);
// проверяем сессии инструмента
datetime ds=tc/(60*60*24); ds*=(60*60*24); // начало сегодня
datetime sec=tc-ds; // число секунд от начала дня
bool b=false;
for (int l=0; l<10; l++) // подразумеваем, что админ сделал не более 10 сессий в сутки
{
datetime fs, ts;
if (!SymbolInfoSessionTrade(smb, TimeDayOfWeek(TimeCurrent()), l, fs, ts)) break; // данные сессии
if (sec>=fs && sec<=ts) return(true);
}
return(false);
}
5-rk의 무언가가 기능을 전달하지 않습니다.
(왜 궁금해???)
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/cterminalinfo/cterminalinfoitradeallowed