코드에 대한 조언이 필요합니다. 데이터베이스에서 고문을 가져와 테스트하고 추가하고 빼고 계수를 변경하여 좋은 그림을 얻었습니다. 그림이 나온 것 같지만 데모에서는 아무 것도 작동하지 않습니다. 다른 것입니다. 도리어, 그것은 악 같아, 나는 100 % 증가 한 달 동안 좋은 기사와 한 달 동안 좋은 차트에 따라 모든 것을 조정하고 있습니다. 그래서 테스터 전용이고 적합하거나 어떻게 든 다르게 테스트해야합니까 ??? 나는 또한 TreilingParabolikSAR을 리메이크하여 손실이 멈추지 않도록하고 싶지만 가격에서 주어진 거리에있는 평신도는 아마도 누군가가 그것을 얻을 수있는 곳을 알려줄 것입니다. 지금까지는 오지 않았습니다. 여기에 좋은 그래프가 있는 결과 코드 중 하나가 있습니다. 모든 것이 잘못되었을 수 있지만 무엇이 잘못되었는지, 무엇을 고칠지 알려주십시오 ...
#property copyright""#property link""#property version"1.00"//--- input parametersinputushort StopLoss= 600 ;
inputushort TakeProfit= 450 ;
inputint EA_Magic= 12345 ; // Magic Number советникаinputuchar ma_period_1= 5 ;
inputuchar ma_period_2= 15 ;
inputuchar ma_period_3= 30 ;
inputdouble Lot= 0.01 ;
//--- глобальные переменныеint STP,TKP; // будут использованы для значений Stop Loss и Take Profit//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//--- Для работы с брокерами, использующими 5-ти значные котировки,//--- умножаем на 10 значения SL и TP
STP = StopLoss;
TKP = TakeProfit;
//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick ()
{
double MA_1_t = iMA ( NULL , 0 ,ma_period_1, 0 , MODE_EMA , PRICE_CLOSE );
double MA_2_t = iMA ( NULL , 0 ,ma_period_2, 0 , MODE_EMA , PRICE_CLOSE );
double MA_3_t = iMA ( NULL , 0 ,ma_period_3, 0 , MODE_EMA , PRICE_CLOSE );
//---MqlTick latest_price; // Будет использоваться для текущих котировокMqlTradeRequest mrequest; // Будет использоваться для отсылки торговых запросовMqlTradeResult mresult; // Будет использоваться для получения результатов выполнения торговых запросовMqlRates mrate[]; // Будет содержать цены, объемы и спред для каждого бараZeroMemory (mrequest); // Инициализация полей структуры mrequest//--- Получить текущее значение котировки в структуру типа MqlTickif (! SymbolInfoTick ( _Symbol ,latest_price))
{
Alert ( "Ошибка получения последних котировок - ошибка:" , GetLastError (), "!!" );
return ;
}
//--- есть ли открытые позиции?bool Buy_opened= false ; // переменные, в которых будет храниться информация bool Sell_opened= false ; // о наличии соответствующих открытых позицийif ( PositionSelect ( _Symbol )== true ) // есть открытая позиция
{
if ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY )
{
Buy_opened= true ; //это длинная позиция
}
elseif ( PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL )
{
Sell_opened= true ; // это короткая позиция
}
}
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);
//--- собираем все вместеif (Buy_Condition_1)
{
// есть ли в данный момент открытая позиция на покупку?if (Buy_opened)
{
Alert ( "Уже есть позиция на продажу!!!" );
return ; // не добавлять к открытой позиции на продажу
}
mrequest.action = TRADE_ACTION_DEAL ; // немедленное исполнение
mrequest.price = NormalizeDouble (latest_price.ask, _Digits ); // последняя цена ask
mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
mrequest.symbol = _Symbol ; // символ
mrequest.volume = Lot; // количество лотов для торговли
mrequest.magic = EA_Magic; // Magic Number
mrequest.type = ORDER_TYPE_BUY ; // ордер на покупку
mrequest.type_filling = ORDER_FILLING_FOK ; // тип исполнения ордера - все или ничего
mrequest.deviation= 100 ; // проскальзывание от текущей цены//--- отсылаем ордерOrderSend (mrequest,mresult);
// анализируем код возврата торгового сервераif (mresult.retcode== 10009 || mresult.retcode== 10008 ) //запрос выполнен или ордер успешно помещен
{
Alert ( "Ордер Buy успешно помещен, тикет ордера #:" ,mresult.order, "!!" );
}
else
{
Alert ( "Запрос на установку ордера Buy не выполнен - код ошибки:" , GetLastError ());
return ;
}
}
}
표시기 값을 가져오려면 먼저 OnInit에서 표시기 핸들을 만든 다음 CopyBuffer 를 사용하여 OnTick의 배열에 값을 복사합니다. 그리고 MQL5의 Trade Operations 기사에서 포지션/오더를 열고/닫는 코드를 작성하는 것이 얼마나 쉬운지 설명합니다.
paladin800 : 표시기 값을 가져오려면 먼저 OnInit에서 표시기 핸들을 만든 다음 CopyBuffer 를 사용하여 OnTick의 배열에 값을 복사합니다. 그리고 MQL5의 Trade Operations 기사에서 포지션/오더를 열고/닫는 코드를 작성하는 것이 얼마나 쉬운지 설명합니다.
고맙습니다! MQL4는 완전히 다르고 더 간단하다는 것을 알았습니다. 하지만 MQL5에서는 테스트 속도가 더 빠르고 정확하다고 생각합니다.
영점 막대의 데이터가 사실이 아닌 이유를 이해하지 못합니다.
나는이 결과를 얻는다
2013.10.27 17:45:26 코어 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00
2013.10.27 17:45:26 코어 1 2013.01.01 00:00:00 369878
전문가에게 모든 것을 말하는 것을 잊었습니다.
즉, XXX 날짜에서 YYY 날짜까지 Expert Advisor를 테스트 할 때 XXX에서 데이터를 로드할 수 있는 깊이는????????????????????
코드에 대한 조언이 필요합니다. 데이터베이스에서 고문을 가져와 테스트하고 추가하고 빼고 계수를 변경하여 좋은 그림을 얻었습니다. 그림이 나온 것 같지만 데모에서는 아무 것도 작동하지 않습니다. 다른 것입니다. 도리어, 그것은 악 같아, 나는 100 % 증가 한 달 동안 좋은 기사와 한 달 동안 좋은 차트에 따라 모든 것을 조정하고 있습니다. 그래서 테스터 전용이고 적합하거나 어떻게 든 다르게 테스트해야합니까 ??? 나는 또한 TreilingParabolikSAR을 리메이크하여 손실이 멈추지 않도록하고 싶지만 가격에서 주어진 거리에있는 평신도는 아마도 누군가가 그것을 얻을 수있는 곳을 알려줄 것입니다. 지금까지는 오지 않았습니다. 여기에 좋은 그래프가 있는 결과 코드 중 하나가 있습니다. 모든 것이 잘못되었을 수 있지만 무엇이 잘못되었는지, 무엇을 고칠지 알려주십시오 ...
나는 특정 값을 테스트하고 초과하면 거래가 열립니다.
로그인 옵션:
bool Sell_Condition = (signal >= sgl);
테스터에서 sgl 변수의 값을 반복합니다.
변수 유형 "신호" 이중.
단일 테스트를 실행하면 sgl= 0.003일 때 0.0024, 0.0027, 0.0015 등으로 입력되는 것을 알 수 있습니다.
연산 논리는 정확하지만 실행 정확도는 정확하지 않습니다.
성능의 정확도를 향상시키는 방법은 무엇입니까?
...
실행의 정확도를 향상시키는 방법은 무엇입니까?
그래서 시도:
날짜를 "비표준" 문자열 형식에서 datetime 또는 최소한 쉽게 변환 가능한 문자열 형식으로 변환하는 비교적 쉬운 방법이 있습니까?
특히 월이 Jan/Jeb/...인 경우 스크립트에 어떻게 입력하시겠습니까? 내 말은, 라인에서 수동으로 월을 선택하고 12가지 변형의 해당 숫자로 대체함으로써만 가능합니까? 아니면 StringToTime 등의 형식을 지정하는 방법이 어딘가에 누락되어 있습니까?
이제 이 문제를 처리하는 디자인이 있습니다.
...하지만 조건부로 일하지만 어떻게 든 그녀는 나에게 예쁘지 않습니다.
MA_1_t - 작은 기간, MA_2_t - 중간 기간, MA_3_t - 큰 기간.
내가 다음 조건을 수행하는 경우:
bool Buy_Condition_1=(MA_1_t < MA_2_t && MA_2_t < MA_3_t);
거래가 열립니다.
반대 조건:
bool Buy_Condition_1=(MA_1_t > MA_2_t && MA_2_t > MA_3_t);
단일 거래가 아닙니다. 이유는 무엇입니까?
고문 코드:
MA_1_t - 작은 기간, MA_2_t - 중간 기간, MA_3_t - 큰 기간.
내가 다음 조건을 수행하는 경우:
거래가 열립니다.
반대 조건:
단일 거래가 아닙니다. 이유는 무엇입니까?
고문 코드:
표시기 값을 가져오려면 먼저 OnInit에서 표시기 핸들을 만든 다음 CopyBuffer 를 사용하여 OnTick의 배열에 값을 복사합니다. 그리고 MQL5의 Trade Operations 기사에서 포지션/오더를 열고/닫는 코드를 작성하는 것이 얼마나 쉬운지 설명합니다.
아직 열리지 않은 보류 중인 주문을 닫는 방법을 알려주세요. 다음과 같이 하려고 합니다.
또는 mrequest.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits ); 다른 정보를 작성해야 합니까? 고맙습니다.아직 열리지 않은 보류 중인 주문을 닫는 방법을 알려주세요. 다음과 같이 하려고 합니다.
또는 mrequest.price= NormalizeDouble (Bid-(SL- 45 ) * _Point , _Digits ); 다른 정보를 작성해야 합니까? 고맙습니다.