In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:
誰も助けてくれる人がいないようです。皆さん、回答お願いします。
推測の域を出ませんが、問題はiCustomの使用ではなく、インジケータ、またはその拡張機能にあると思われます。おそらく、バッファ2と3をアラートと一緒に割り当てるのが良いのではないでしょうか?(しかし、私はそれらのインデックスゼロ([0])値がどのように/いつ割り当てられるのかを理解することができませんでした。)
価格データ情報
私の場合、次のバーのオープンで条件を生成するシグナルを元にエグジットとエントリーを行っていますが、指標や移動平均線はオープンプライスを使うべきでしょうか?私はいつも株式取引では 終値を使っているので、当然そちらに傾倒しています。世の中のコンセンサスはどうなっているのでしょうか?
ちょっと思ったんですが
トレーリングストップをペアの最小ストップ レベルに設定するにはどうしたらよいでしょうか。ストップレベルが4ピップまたは25ピップの場合、ペアによってはその時点でスリップが作動します。
各ペアのコントラクトスペックはどのように使用するのでしょうか?
乾杯
Beno
Sidus_Bagoインジケータ
こんにちは、increaseです。
Sidus_BagoをMTFのインジケータにするためにコードを書くのを手伝ってもらえないでしょうか。このインジケーターもとてもいいと思います。
Sidus_Bagoはこちらです。
Sidus System confirmation' indicator?
ありがとうございました。
このEAについて、どなたか教えてください。
こんにちは、皆さん。
最初のEAを作りましたが、コンパイルできません。" '\end of program' - unbalanced left parenthesis "というエラーが出て、何度もやり直しましたが、問題が見つかりませんでした。 取引戦略のロジックは気にしないでください(熱心でない限り)。
どうやらファイルを添付する権限がないようなので、カットアンドペーストも申し訳ありません。
ありがとうございました。
Rob,
パース、オーストラリア
//---------------
//+------------------------------------------------------------------+
//| Rob_Ea.mq4 | ロブ・カズンズ
//| ロブ・カズンズ|
//+------------------------------------------------------------------+
#property copyright "Rob Cousins" (ロブ・カズンズ)
#property リンク ""
#define MAGICMA 20090216
//---- 入力パラメータ
extern double Lots;
extern int Short_MA=5;
extern int Long_MA=15;
extern double Stoch_Upper=70.0;
extern double Stoch_Lower=30.0;
extern double RSI_Upper=80.0; extern double RSI_Lower=30.0; extern double RSI_Upper=80.0;
extern double RSI_Lower=20.0; extern double RSI_Upper=80.0; extern double RSI_Lower=20.0;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
文字列 Current_Indication()
{
// 移動平均の変数
double MA_Short;
double MA_Long;
string 現在のMA_Indicator;
string Previous_MA_Indicator;
string MA_Indicator;
// ストキャスティクス変数
string Current_Stoch_Indicator;
string Previous_Stoch_Indicator;
文字列 Stoch_Indicator
// RSI変数
文字列 Current_RSI_Indicator;
string Previous_RSI_Indicator;
文字列 RSI_Indicator;
// --------------------------------------
// まずMAを取得し、MAクロスをチェックする
// --------------------------------------
MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);
MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);
if (MA_Short>MA_Long) Current_MA_Indicator="BUY";
if (MA_Short<MA_Long) Current_MA_Indicator="SELL";
// シフトしたMA(オプションの最後の'1')を使用して、前回値と今回値を設定する
if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,PRICE_MEDIAN,1)))Previous_MA_Indicator="BUY "とする。
if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,PRICE_MEDIAN,1)))。Previous_MA_Indicator="SELL "とする。
if ((現在_MA_Indicator=="BUY") && (前_MA_Indicator=="BUY"))MA_Indicator="BUY "とする。
if ((現在_MA_Indicator=="SELL") && (前回_MA_Indicator=="SELL"))MA_Indicator="売り";
// ----------------------------
// ストキャスティック指標チェック
// ----------------------------
if(iStochastic(NULL,0,6,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY".If(iStochastic(NULL,6,3,3,Stoch))は、ストキャスティクス指標である。
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="SELL";
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";
if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator= "SELL";
if ((現在_Stoch_Indicator=="BUY") && (前_Stoch_Indicator=="BUY"))Stoch_Indicator="BUY";
if ((現在_Stoch_Indicator=="売り") && (前_Stoch_Indicator=="売り"))Stoch_Indicator="SELL";
// ----------------------------
// RSIインジケーターのチェック
// ----------------------------
if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";
if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL"; if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="SELL";
if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY"; if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper)Previous_RSI_Indicator="BUY
if(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower)Previous_RSI_Indicator="SELL".If(Previous_RSI_Indicator="売り")
if ((現在_RSI_Indicator=="BUY") && (前_RSI_Indicator=="BUY"))RSI_Indicator="BUY "とする。
if ((現在_RSI_Indicator=="SELL") && (前回_RSI_Indicator=="SELL"))。RSI_Indicator="SELL"。
//----------------------------------------
// 買いか売りかを判断する
//----------------------------------------
if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("BUY")です。
if((MA_Indicator=="SELL") && (Stoch_Indicator=="SELL") && (RSI_Indicator=="SELL") return("SELL")となります。
}
//+------------------------------------------------------------------+
//| オープンポジションを計算する
//+------------------------------------------------------------------+
文字列 Current_Trade(string symbol)
{
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{
return ("NONE");
ブレーク
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) return("BUY")。
if(OrderType()==OP_SELL) return("SELL")。
}
}
}
//----------------------------------------------------------------------
// シグナルが方向転換した場合、まず最初に行うべきはクローズです。
// 別の取引を始める前に、現在開いている取引を閉じる。
//-----------------------------------------------------------------------
void CloseTrade(string symbol)
{
// double ma;
//---- 新しいバーの最初のティクスのためにのみ取引に行く。
// if(ボリューム[0]>1) return;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; // 未決済取引はない。
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
//----注文の種類を チェック
// 両方のオプションを残しておくと、別の方法でやりたいときに便利です。
// 例えば、違う色にしたい場合などです。 それ以外の場合は、2つのコマンドは同じものです。
// 必要なのは1つだけです。 価格の違いを除いては......。 Doh!
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,White)。
ブレーク
}
if(OrderType()==OP_SELL)の場合
{
オーダークローズ(OrderTicket(),OrderLots(),Ask,3,White);
ブレーク
}
}
//----
}
//-----------------------------------------------------------
// 茶葉がそう言っているのなら、ポジションを開く
//------------------------------------------------------------
void OpenTrade(string symbol,string Type)
{
int res;
//---- 買い条件
if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "ROB EA TEST",MAGICMA,0,Blue);
//---- 売り条件
if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "ROB EA TEST",MAGICMA,0,Red).を送信します。
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
void start()
{
//----
//---- 現在のシンボルで未決済注文を計算する
//--- もし未決済の取引がなければ、単純に1つ開くだけです...
if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication()).If(Current_Trade(Symbol())=="NONE")。
// しかし、未決済の取引がある場合は、新しい取引を開始する前にまずそれを決済する必要があります。
if ((Current_Trade(Symbol())=="BUY") && (Current_Indication() =="SELL"));
{
CloseTrade(Symbol())。
OpenTrade(Symbol(),Current_Indication())。
}
if ((Current_Trade(Symbol())=="SELL") && (Current_Indication() =="BUY")).{ (Current_Trade(Symbol())=="BUY")。
{
CloseTrade(Symbol())。
OpenTrade(Symbol(),Current_Indication())。
}
を返します。
}
さあ、どうぞ。
OK、早かったですねー。 どうもありがとうございました。 何が問題だったのでしょうか?
ロブです。
ファイル書き込みの問題
私はEAをプログラミングしており、取引結果(損失、勝利)と指標の値を保存するためにファイルを使用しています。EAが取引を開始するとき、指標の値と取引が行われた時間を「sellOpenInd.tab」ファイルに書き込みます。
この操作の後、ファイルは含まれています。
CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00
CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00
CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00
etc...
In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:
Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win
etc..
Here is my code(i know is not looking nice
):
int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");
if(dates>0){
for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons
dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");
FileSeek(dates,filepos,SEEK_SET);
while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}
decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.
Comment(filterS7);
for (i =OrdersHistoryTotal()-1; i>=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Currencies) {
if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){
historyDateTime=TimeToStr(OrderOpenTime());
OrderP=OrderProfit();
if(OrderP>0)orderresult="win";if(OrderP<=0)orderresult="loss";
if(filterS7==historyDateTime) {
testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;
results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");
FileSeek(results,0,SEEK_END);
FileWrite(results,testFline);
testFline="";
filestr="";
}
}
}
}
if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;
}
}
}
あなたのシークルの各ステップでは、「sellOpenInd.tab」というファイルを何度も何度も開いて いますね。
これを試してみてください。
if(dates>0){
for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons
FileSeek(dates,filepos,SEEK_SET);
while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}
decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.
Comment(filterS7);
for (i =OrdersHistoryTotal()-1; i>=0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Currencies) {
if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){
historyDateTime=TimeToStr(OrderOpenTime());
OrderP=OrderProfit();
if(OrderP>0)orderresult="win";if(OrderP<=0)orderresult="loss";
if(filterS7==historyDateTime) {
testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;
results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");
FileSeek(results,0,SEEK_END);
FileWrite(results,testFline);
testFline="";
filestr="";
}
}
}
}
if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;
}
}
}Roger09さん、以前にも試したことがあるのですが、うまくいきませんでした。ポインタが次の行に移動して いないように見えるのですが、なぜでしょうか?
とにかく、返信ありがとうございました。