int nmonth = buff[1]=="Jan"?01:buff[1]=="Feb"?02:buff[1]=="Mar"?03:buff[1]=="Apr"?04:buff[1]=="May"?05:buff[1]=="Jun"?06:
buff[1]=="Jul"?07:buff[1]=="Aug"?08:buff[1]=="Sep"?09:buff[1]=="Oct"?10:buff[1]=="Nov"?11:buff[1]=="Dec"?12:01;
#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;
}
}
}
ゼロバーのデータが正しく表示されない理由がわかりません、アドバイスお願いします。
このような結果が得られました。
2013.10.27 17:45:26 Core 1 2013.01.01 00:00:00 369878 2012.12.31 19:00:00 2012.01.02 00:00:00
2013.10.27 17:45:26 Core 1 2013.01.01 00:00:00 369878
専門家に全部話すのを忘れていた。
つまり、XXX日からYYY日までのEAをテスト する場合、XXX日からどの程度の深さまでデータをダウンロードできるのか?
コードに関するアドバイスが必要です:データベースからアドバイザーを取得し、テストし、追加し、減算し、係数を変更して良い画像を取得しました。画像は判明したようですが、デモでは何も機能しません。ちなみに、それは悪のようです。私は教えられた記事に従ってすべてを調整し、1か月間良いチャートを100%増やします。つまり、これはテスター専用であり、適切であるか、何らかの方法でテストする必要がありますか?また、TreilingParabolikSARを作り直して、 損失が止まらないようにしたいのですが、価格から一定の距離にいる素人は、どこで入手できるかを教えてくれるかもしれません。これは、良いグラフで得られたコードの1つです-ここではすべてが間違っている可能性がありますが、何が間違っているのか、何を修正するのかを教えてください...
ある値をテストし、それを超えると取引が開始される。
入力のためのパラメータ。
bool Sell_Condition = (signal >= sgl);
テスターで変数sglの値を選んでいます。
変数型 "signal "double。
単一のテストを実行すると、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);
一度も取引していない。その理由は何でしょうか?
EAコード
MA_1_t:小周期、MA_2_t:中周期、MA_3_t:大周期。
以下の条件でやると
をクリックすると、トレードが開始されます。
条件が逆なんです。
一度も取引していない。その理由は何でしょうか?
EAコード
インジケータの値を取得するには、OnInitでインジケータハンドルを作成し、OnTickでCopyBufferを 使用して配列に値をコピーする必要があります。MQL5での取引操作の 記事では、ポジション/注文を開く/閉じるためのコードをより簡単に書く方法を示しているだけ です。
未決済の注文を決済する方法を教えてください。私はこの方法でやろうとしています。
それとも、mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits) という行で、他の情報を書けばいいのでしょうか?ありがとうございます。未決済の注文を決済する方法を教えてください。私はこの方法でやろうとしています。
それとも、mrequest.price=NormalizeDouble(Bid-(SL-45) *_Point,_Digits) という行で、他の情報を書けばいいのでしょうか?ありがとうございます。