}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :
このような方法を試してみてください。
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
return(tname+"_"+Symbol()+Period()+".csv");
}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this "20090924_102541_EURUSD15.csv"). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :
[php]string uniqueFileName()
{
string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
string tname="";
int thand;
for (int i=0;i<StringLen(sname);i++)
{
string char = StringSubstr(sname,i,1);
if (char!="." && char!=":")
if (char==" ")
tname = tname+"_";
else tname = tname+char;
}
//
//
//
//
//
tname = tname+"_"+Symbol()+Period()+".csv";
thand = FileOpen(tname,FILE_BIN|FILE_READ);
if (thand==-1)
return(tname);
else
{
FileClose(thand);
return("failed to make unique name");
}
}失敗した場合は"failed to make unique name" という文字列が返され、その場合、何回再試行させるかを決める必要があります。
追記: 使い方はsomeFileName=uniqueFileName() となります。
よろしくお願いします。
mladen
こんにちは、皆さん。
私はトレーダーですが、mq4言語については知りませんし、火曜日からこれをしようとしています....
スクリプトを使用してチャートをcsv形式で保存する必要があります。どんなチャートでも、どんなタイムフレームでも、スクリプトをドラッグするだけで、ファイル名を除いて、素敵なスクリプトができました。
同じフォルダに別のファイルを保存するたびにファイル名を変更する必要がないように、チャートを保存するたびにユニークなファイル名を自動的に生成してくれることを望みます。
文字列 fname =[日付 YYYYMMDD 形式]+ "_"+[日付 - 時間のみ]+"_" + Symbol() + Period() + ".csv";
問題のコードは太字になっています。
このコードを正しく実行すると、出力ファイル名は次のようになると思います。
20090924_10_GBPJPY15.csv
この巨大なスレッドの157ページを読むために多くの時間を費やすことができないことを申し訳ありません(私は試したが、私の頭はめまいを起こした)。
よろしくお願いします。このように使います(mqlは関数やプロシージャのネストを許さないので、関数やプロシージャは別のものでなければなりません)。
完璧に動作します、ありがとうございました。
ファイルを任意の場所に保存することについて : はい、Windows APIを使用して行うことができます。ここに、良い例と良い説明のあるリンクがあります。WinAPIによるファイル操作 - MQL4 Articles
私はそれについて学び、その後、このスレッドに戻ることを確認します。
神のご加護がありますように。
"Duplicate entry"(重複入力)。なぜ私のプログラムは動作しないのでしょうか?
申し訳ありません:以前に投稿したのですが、フォーラム上の投稿を再配置することができません。
(それはまた、私のコンピュータの履歴から "ブックマーク "を許可していない...)
とにかく:2つの連続したバーが "アップ "または "ダウン "であるかどうかをテストする簡単なプログを書いた。
つまり、"up "の場合、バー1の高値がバー2より高く、バー1の安値もバー2より高い。
の安値も2より高い。(下降は対称的です。)
このプログでは、ブレイクアウトを扱うので、"up "では、バー1の高値からバー2の安値を引いた値が、ある閾値を超える必要があります。
バー1の高値からバー2の安値を引いた値が、ある閾値以上でなければなりません。(下降は相似形)
現在、M30 GBPUSDで動作しています。この「ブレイクアウトのしきい値」は目測で選びました。
TakeProfitと同じように、目測で選んでいます。StopLossはプログにある通りです。
というわけで、MetaTraderとmql4の経験を積んでいこうと思います。
それから、他のプログを試したり、最適化したりすることができます。
それで、プログをコンパイルして、Strategy Testerで 実行するところまではできました。
しかし、プログの後半部分にはたどり着けず、また、注文を入れたというプリントも
注文を入力したことを表示しません。
経験豊富な方にとっては、私のエラーはどんなものであれ、おそらく明白なものでしょう。
私には自明ではありません。
そこで:この件に関して助けていただけないでしょうか?
ありがとうございます。
Progは続く。
//+------------------------------------------------------------------+
///エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//----
bool TrendUp1; double TakeProfitUp; double EE = .00500;
bool OrdTot_OK;double lot;double slip;
double SL_Trailing_Up;bool High2Up;bool Low2Up;
int ticketup;int ticketdown;bool DownAndBig; bool UpAndBig;
bool TrendDown; double SL_Trailing_Down;double TakeProfitDown;
bool High2down; bool Low2down;
int ABC = OrdersTotal();
double Size1 = .00630;bool BigUp; double A = High[1];double B= Low[2];
double C= High[2]; double D= Low[1];bool BigDown;
//ダウンオーダー開始
if (ABC == 0)// no orders out is true.
OrdTot_OK = trueです。
if (ABC == 0)// no orders out is true.
Print ("on down order sequence, no orders were out");
if ((C-D) > Size1)//high of 2 less of low of 1 > .0063
BigDown = true。
if ((C-D) > Size1)//HIGH OF 2 less LOW OF 1 > .0063
Print ("on down order sequence, found a big breakout down");
if (高値[1]<高値[2])
High2down=trueとする。
if (高値[1]<高値[2])
Print ("on down order sequence, the consecutive bars have decreasing highs");
if(Low[1]<Low[2])の場合
Low2down=true。
if(安値[1]<安値[2])
Print ("on down order sequence, the consecutive bars have decreasing lows");
if (ハイ2ダウン && ロー2ダウン)
TrendDown=true。
if (ハイ2ダウン && ロー2ダウン)
Print ("on down order sequence, TrendDown flag is set");
if (TrendDown)
SL_Trailing_Down = High[1];
if (TrendDown)
Print ("on down order sequence, did set the stop_loss");
if (TrendDown)
TakeProfitDown = ビッド - (.005);
if (トレンドダウン)
Print ("下降中の注文シーケンスで、テイクプロフィットを得ました", TakeProfitDown);
if (TrendDown && BigDown)
DownAndBig = true。
if (DownAndBig && OrdTot_OK)
ticketdown= OrderSend(Symbol(),OP_SELL,lot,Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue).if (Down&Big & OrdTot_OK);
if (DownAndBig && OrdTot_OK)
Print ("on down order sequence, tried to enter a ticket", ticketdown);
if (チケットダウン < 0)
Print("OrderSend_Downはエラー#で失敗しました",GetLastError()).Print("OrderSend_Downはエラー#で失敗しました。
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
if (ABC == 0)
OrdTot_OK = trueです。
if (ABC == 0)
Print ("on the going up sequence, no orders were out");
if ((A - B) > Size1)
BigUp = true。
if ((A - B) > Size1)
Print ("on the going up sequence, the size test for the two bars was ok");
if (高値[1] > 高値[2])
High2Up = true;//44
if (高値[1] > 高値[2])
Print ("on the going up sequence, the test for increasing highs was ok");
if(ロー[1] > ロー[2])
Low2Up=trueとする。
if(安値[1] > 安値[2])
Print ("on the going up sequence, the test for increasing lows was ok");
if (High2Up && Low2Up)
TrendUp1=trueとする。
if (High2Up && Low2Up)
Print ("on the going up sequence, did set the flag for going up");
if (TrendUp1)
SL_Trailing_Up = Low[1] ;
if (TrendUp1)
Print ("on the going up sequence, established the stoploss");
if (TrendUp1)
TakeProfitUp = Ask + (.005);
if (TrendUp1)
Print ("上昇シーケンスで、利益確定", TakeProfitUp);
if (TrendUp1 && BigUp)
UpAndBig = true;
if ( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);
if (UpAndBig && OrdTot_OK)
Print ("on the going up sequence, tried to send in an order", ticketup);
if (チケットアップ < 0)
Print("OrderSend_Upはエラー#で失敗しました",GetLastError()).Print("OrderSend_Upはエラー#で失敗しました。
return(0);
//-------------------------------------------------up order done
//----
return(0);// この行は不要かもしれません。
//+------------------------------------------------------------------+
//----
return(0)です。
}
//+------------------------------------------------------------------+
複数のCharToStrを使用する?
wingding文字を 2つ配置したい。1つは他の上にあります。これは、私が最初の文字を設定するために使用しているコードです-----ObjectSetText("signal "+x+"0", CharToStr(104),symbolSize, "Wingdings",Yellow);.これは、私が最初の文字を設定するために使用しているコードです。
(236)を追加して、別の色を使いたいと思います。
それは可能なのでしょうか?もし可能であれば、よろしくお願いします。
ご覧いただきありがとうございます。
gever17
スリープ|IsTradeContextBusy
CodeMastersの皆様、そしてその他の皆様、こんにちは。
私はフラクタルに基づいたEAを持っており、それは1つのMT4プラットフォームで、複数の通貨 ペア、D1タイムフレームで使用されています。
複数のEAが同じ瞬間に取引するため、私のジャーナルに''Trade Context Is Busy''の通知が届きます。
EAにSleepまたはIsTradeContextBusy関数を挿入したいのですが、どこに入れたらいいのかわかりません。
- Send order関数の後、SellとBuyの関数のために別々に?
- 売りと買いの両方の注文を送信する関数の後?
- どのようにこの問題を解決するために - と
if (IsTradeContextBusy() == true) Sleep (5000); return;
???
アドバイスまたは解決策をご指摘ください。
あなたの助けを借りて、非常にありがとうございました。
楽しんでください。
サイモン
EAを添付しました。
アドバイスが必要です
こんにちは。
私がお金を失いつつある問題について、プログラマーに本当に感謝しています。それは、ある価格レベルでポジションを開くべきEAがあるのですが、時々ウィップソーによってポジションを開きすぎてしまうのです。私はそれが1つだけ開くようにしたいです。どなたか、これは1行のコードで修正できるのか、それともプログラマーを雇う必要があるのか教えていただけませんか?
ありがとうございました。
アドバイスお願いします。
こんにちは、私は本当にMagicNumberがどのように動作するのか分からないのですが、それはDOESNT WORKのように思えるので? 私は2つの簡単なEAを作りました、まだ勉強中です。
1.価格が100SMAを超えたら買い
2.同じく100SMAを超えたら売り
というのは、2つのEuroSDチャ ートに貼り付けると、1つは買い、1つは売りが同時に発生するはずです。理論上は、それぞれのEAが独立して動作する。
しかし、そうではない。売りが先に実行されると、買いのEAが動作しないような気がします。
どなたか、私のEA、MagicNumberを制御するEAを再コード化できませんか?何か間違いがありますか?
どうもありがとうございました。
こんにちは、私はMagicNumberがどのように機能するのかよく分からないのですが、Doesnt Workのように思えるのですが?私は2つの簡単なEAを作りましたが、まだ勉強中です。
1.100SMAを超えたら買い
2.同じく100SMAを超えたら売り
というのは、2つのEuroSDチャートに貼り付けると、1つは買い、もう1つは売りが同時に発生するはずです。理論上は、それぞれのEAが独立して動作する。
しかし、そうではない。売りが先に実行されると、買いのEAが動作しないような気がします。
どなたか、私のEA、MagicNumberを制御するEAを再コード化できませんか?何か間違いがあるのでしょうか?
ありがとうございました。マジックナンバーは正しく設定されているようですね。唯一の問題は、同じマジックナンバーの注文が現在の取引プールに存在するかどうかをチェックして いないことです。新しい取引を始める前に、すべての未決済注文を調べて、OrderMagicNumber() == あなたのマジックナンバーかどうかをチェックする必要があります。