FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);
FileClose(handle);
Print(" Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",buyorderOpen);
FileClose(handle);
Print(" Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
FileWrite(handle,"Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);
FileClose(handle);
Print(" Winning Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
FileWrite(handle,"Losing Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",sellorderOpen);
FileClose(handle);
Print(" Losing Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
また、ファイル書き込みのサンプルはMTエディタから直接書き込んでいます。
これは、csvファイルにログを記録することができ、あなたの希望の出力に変更します。
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("c:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle, Close[0], Open[0], High[0], Low[0], TimeToStr(orderOpen));
FileClose(handle);
}
私はIBFXライブを使用しているので、マイクロロットでライブのフォワードテストが可能です。しかし、私は口座に他のライブトレードを持っているので、CTの結果を別々に取り出さなければならないでしょう。
メールアドレスはPMで私は評価するすべての指標と同様に、このすべてをファイルに印刷する必要があります...現在、それはちょうどジャーナルにこれらを印刷しています。
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
int handle;
datetime orderOpen=OrderOpenTime();
handle=FileOpen("C:\cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle>0)
{
FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));
FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);
FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);
FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);
FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);
FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);
FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);
FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);
FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);
FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);
FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);
FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);
FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);
FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);
FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);
FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);
FileClose(handle);
}
どうすればいいのかよくわからないのですが、これでいいのでしょうか?
2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro EURUSDm,H1: error(4101): ファイル名が間違っている。
2006.11.08 11:21:54 2006.10.06 12:08 Cyberia Trader1.9 R2.2 AlertEuro: absolute file path "C:\cyberia_log.csv" is not allowed.
????
どうしたんですか?
よし、これでいいんだ...。
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
{
datetime sorderOpen=OrderOpenTime();
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle!=-1)
{
FileWrite(handle,"Hour: ",TimeHour(CurTime())," Minute: ",TimeMinute(CurTime()));
FileWrite(handle,"SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality);
FileWrite(handle,"BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality);
FileWrite(handle,"UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);
FileWrite(handle,"UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);
FileWrite(handle,"SellSucPossibilityQuality:", SellSucPossibilityQuality);
FileWrite(handle,"BuySucPossibilityQuality:", BuySucPossibilityQuality);
FileWrite(handle,"UndefinedPossibilityQuality:", UndefinedPossibilityQuality);
FileWrite(handle,"SellPossibilityQuality:", SellPossibilityQuality);
FileWrite(handle,"BuyPossibilityQuality:", BuyPossibilityQuality);
FileWrite(handle,"UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);
FileWrite(handle,"SellSucPossibilityMid:", SellSucPossibilityMid);
FileWrite(handle,"BuySucPossibilityMid:", BuySucPossibilityMid);
FileWrite(handle,"UndefinedPossibilityMid:", UndefinedPossibilityMid);
FileWrite(handle,"SellPossibilityMid:", SellPossibilityMid);
FileWrite(handle,"BuyPossibilityMid:", BuyPossibilityMid);
FileClose(handle);
}
else
{
int err;
err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}これはファイルを生成しているのですが、ファイルには1つのエントリしか含まれておらず、EVERY ORDERは含まれていません...オイ
私はあなたのためにそれをコード化します、私は今夜まで私を与える、あなたがダンプしたいものを教えてください。
上のサイバリアロジックと合わせて...。
ベアーズとブルズのパワー指標、cci、adxの3つの値、macdとstochastic、rsi、そして現在のバーで実行されているクローズに基づいて1MAをテストしようと考えています(クローズのMA)もしあなたが評価するために働くかもしれないと思う他の指標があれば、どうぞ、それらも捨てないでください。私はちょうどプロファイルを生成したいので、より多くの角度、本当に良い...ポイントに私は推測するまで、あなたはアイデアを得る。
もうひとつ、付け加えておくことがあります。私が別のEAで行った作業の一部で、注文が始まったときに口座の純資産 価値を保存し、注文が終了したときに口座の純資産価値と比較して、その取引が勝ちか負けかを判断します。このデータダンプには、そのような取引の結果も含める必要があり、取引を分析するときにどのカテゴリに入れるべきかが分かります。
複数のトレードがあると口座のエクイティが変わるかもしれないから、orderopenpriceとorderclosepriceで判断するように作り直そうと思うんだけど、ちょっと待って............。
もう半分くらいはできたから、もうちょっとだけ手を加えてみようか。
////////////////////////記録する成果
void RecordLongOutcomes()
{
if(Bid<OrderOpenPrice())
{
OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
Print(" Loser Long ",OrderTicket()," Opened:",OrderOpenPrice()," Closed:", Bid);
}
return (0);
void RecordShortOutcomes()
{
if(Ask>OrderOpenPrice())
{
オーダーセレクト(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
Print(" Loser Short ",OrderTicket()," Opened:",OrderOpenPrice()," Closed:", Bid);
}
return(0);
}
また、私が少し前に持っていたが、それを行うにはあまりにも怠惰だった同じアイデア...我々は相関性を決定するために、各注文で何が起こっているかを正確に見ることができるように、各注文時にすべての変数や指標の値を記録することである。
私はそれが最終的に注文信号を与えたときにどのような可能性があったのか気になっていたので、これは本当に表示する必要があります....
ただ、各行の幅がかなり広くなりそうですが、実際に選択されているインジケーターだけをログに残すようにすれば、入りそうな気がしています。
MT4のファイル幅は64フィールドだと思うので、これで十分遊べると思います。
私のEメールをPMに送りました。
ここで目指しているのは...また、しばらく前に持っていた同じアイデアなのですが、あまりにも怠惰だったので...各注文時にすべての変数と指標値を記録して、各注文時に何が起こっているかを正確に見て、相関関係を決定することです。
最終的に注文シグナルを出したときにどの可能性があるのか気になっていたので、これは本当に表示されるはずです。
ただ、各行の幅がかなり広くなりそうですが、実際に選択されたインジケータだけをログに残すようにすれば、何とかなりそうです。
MT4のファイル幅は64フィールドだと思うので、これで十分遊べますね。
私のEメールをあなたにPMしました。そうですね。私たちがフィルターに求めているものは、まさにこの精度です。
では、私のPatientプロジェクトを送りますが、このデータダンプの取得から目をそらさないでくださいね。
私が行き詰まったときに、経験豊富な開発者が近くにいてくれるのはありがたいことです。私はまだ本当に初心者で、経験もあまりありません。
出力に関してですが。このプラットフォームから出力されるものは、エクセルの次元を超えることはないでしょう。必要なのは、簡単に識別できることで、エクセルにインポート したときに、文書化されていない数字の束が区切り文字で区切られているのではなく、何を使って作業しているのかがわかるようにすることです。各値のデータラベルが必要です。15のCTフィールドと8つのインジケータ、CCI, RSI, 1MA, bearspower, bullspower, adx(threevalues) それにmacdとstochasticsを6とすると、合計フィールド=29 それに勝ち負けの結果=30 開閉と時間足3 グランドトータル=33となる。
33のフィールド/オーダー、これで何かが見えてくるのではないでしょうか?もう一つお願いがあるのですが、もし、コンピュータが使っているインターバル値ではなく、人間が理解できるようなdatetimeを実際にプリントアウト(ファイルへの印刷)することができれば、それも助けになるでしょう。
何かというと、エラーメッセージが...。
OrderSelectをオフにするまで、「Invalid ticket for OrderClosefunction」というエラーメッセージが表示されました。
というエラーメッセージが表示されましたが、私が何を得ようとしているのかがわかると思います。
void RecordLongOutcomes()
{
//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice() + Spread < OrderClosePrice())
{
datetime borderOpen=OrderOpenTime();
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle!=-1)
{
FileWrite(handle,"Winning Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);
FileClose(handle);
Print(" Winning Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
}
else
{
int err;
err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}
}
else
{
datetime buyorderOpen=OrderOpenTime();
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle!=-1)
{
FileWrite(handle,"Losing Long OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",buyorderOpen);
FileClose(handle);
Print(" Losing Long ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
}
else
{
int err1;
err=GetLastError();
Print("error(",err1,"): ",ErrorDescription(err1));
return(0);
}
}//if win or lose
}//if buy
}//if symbol and magic number
return (0);
}//record long outcomes
void RecordShortOutcomes()
{
//OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if(OrderType()==OP_SELL)
{
if(OrderOpenPrice() - Spread > OrderClosePrice())
{
datetime borderOpen=OrderOpenTime();
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle!=-1)
{
FileWrite(handle,"Winning Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",borderOpen);
FileClose(handle);
Print(" Winning Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
}
else
{
int err3;
err3=GetLastError();
Print("error(",err3,"): ",ErrorDescription(err3));
return(0);
}
}
else
{
datetime sellorderOpen=OrderOpenTime();
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
if(handle!=-1)
{
FileWrite(handle,"Losing Short OrderTicket: ",OrderTicket()," Opened @: ",OrderOpenPrice()," Closed @: ",OrderClosePrice()," Order Open Time: ",sellorderOpen);
FileClose(handle);
Print(" Losing Short ",OrderTicket()," Opened: ",OrderOpenPrice()," Closed: ", Bid);
}
else
{
int err4;
err4=GetLastError();
Print("error(",err4,"): ",ErrorDescription(err4));
return(0);
}
}//if win or lose
}//if buy
}//if symbol and magic number
return (0);
}//record short outcomes結果を記録するために追加したコードは、filewrite()を除いてうまく動作しています。
ファイルを生成していますが、テスターを通過した最終的な注文と思われる1つのエントリしかありません。つまり、ファイルの最後に追加するのではなく、各エントリを上書きしているのだと思います。これを修正する方法を知っていれば、今すぐこのデータ・ダンプを引き抜くことができるのですが。
OK これでファイルが生成されましたが、ファイルにはEVERY ORDERではなく1つのエントリしか含まれていません......オイ
ファイルを開くたびに上書きされています。一つの解決策は、init()関数で ファイルを開き、deinit()関数で閉じることです。
ファイルを開くたびに上書きされています。init()関数でファイルを開き、deinit()で閉じるというのも一つの解決策です。
読み取りフラグと書き込みフラグの使い方がよくわからないのですが。
以下のような例で見かけますが...。
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
または
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';') とします。
というのはどうでしょうか?
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ|FILE_WRITE, ';');
このように、末尾に追加する方法がよくわからないのです。
init()で開く方法もよくわかりません。
次に
最後に新しい順序を追加します。
そして
deinit()でそれを閉じる
という感じでしょうか。
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_READ, ';');
をinitで実行し、その後
FileWrite(handle, "OrderOpen Time:",sorderOpen).を実行します。
FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality:", SellPossibilityMid*SellPossibilityQuality).FileWrite(handle, "SellPossibilityMid*SellPossibilityQuality")。
FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality:", BuyPossibilityMid*BuyPossibilityQuality); FileWrite(handle, "BuyPossibilityMid*BuyPossibilityQuality", BuyPossibilityMid*BuyPossibilityQuality);
FileWrite(handle, "UndefinedPossibilityMid*UndefinedPossibilityQuality:", UndefinedPossibilityMid*UndefinedPossibilityQuality);
FileWrite(handle, "UndefinedSucPossibilityQuality:", UndefinedSucPossibilityQuality);
FileWrite(handle, "SellSucPossibilityQuality:", SellSucPossibilityQuality); FileWrite(handle, "SellSucPossibilityQuality:", SellSucPossibilityQuality);
FileWrite(handle, "BuySucPossibilityQuality:", BuySucPossibilityQuality); FileWrite(handle, "BuySucPossibilityQuality:", BuySucPossibilityQuality);
FileWrite(handle, "UndefinedPossibilityQuality:", UndefinedPossibilityQuality); FileWrite(handle, "UndefinedPossibilityQuality:", UndefinedPossibilityQuality);
FileWrite(handle, "SellPossibilityQuality:", SellPossibilityQuality); FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality);
FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality); FileWrite(handle, "BuyPossibilityQuality:", BuyPossibilityQuality);
FileWrite(handle, "UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid); FileWrite(handle, "UndefinedSucPossibilityMid:", UndefinedSucPossibilityMid);
FileWrite(handle, "SellSucPossibilityMid:", SellSucPossibilityMid); FileWrite(handle, "SellSucPossibilityMid:", SellSucPossibilityMid);
FileWrite(handle, "BuySucPossibilityMid:", BuySucPossibilityMid); FileWrite(handle, "BuySucPossibilityMid:", BuySucPossibilityMid);
FileWrite(handle, "UndefinedPossibilityMid:", UndefinedPossibilityMid); FileWrite(handle, "UndefinedPossibilityMid:", UndefinedPossibilityMid);
FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid); FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid);
FileWrite(handle, "BuyPossibilityMid:", BuyPossibilityMid); FileWrite(handle, "Winning Short OrderTicket:",OrderTicket()," Opened @:",OrderOpenPrice()," Closed @:",OrderClosePrice()," 注文開始時間: ",borderOpen);
そして、deinitの中で
FileClose(handle)を実行します。
というのは正しいのでしょうか?
//| We initialize the adviser |
//+------------------------------------------------------------------+
int init()
{
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');
SavedBlockSell = BlockSell;
SavedBlockBuy = BlockBuy;
AccountStatus();
GetMarketInfo();
ModelingPeriod = ValuePeriod * ValuesPeriodCount; // Period of simulation in minutes
if (ValuePeriod != 0 )
ModelingBars = ModelingPeriod / ValuePeriod; // Quantity of steps in the period
CalculateSpread();
return(0);
}開いている ファイルが多すぎる」というエラーが出ているのですが?