Open Transaction # 2USDCFh(won't be able to close)
取引番号2を閉じることができません。
何かアイデアはありますか?
注文を決済しようとするとき、EURUSDチャートでEAを実行していると思いますが、これらのポジションは問題なく決済されているので、EURUSDチャートでEAを実行しているのでしょうか。コードがUSDCHF(a little dislexies?) のポジションを決済しようとするとき、間違った買値と売値を使用して います。もし、他の通貨ペアをその通貨と一致しないチャートから決済しようとした場合、決済する前にまず正しい価格を取得する必要があります。
コンパイル時のエラーについて
皆さん、こんにちは。
以下のエラーが発生しました。
'<'-different types in comparsion (比較で異なるタイプ)
以下の行を修正しました。
(NonLagMA_2D_S2&&D_S2Switch==1)
を
(Price_NowD_S2&&D_S2Switch==1)
どこが問題なのでしょうか?
mqlファイルをアップロードすることができません。それは私のスクリプトではありません
みなさん、こんにちは。
以下のエラーが発生しました。
'<'-different types in comparsion (異なるタイプの比較)
以下の行を修正した。
(NonLagMA_2D_S2&&D_S2Switch==1)
を
(Price_NowD_S2&&D_S2Switch==1)
どこが問題なのでしょうか?
mqlファイルをアップロードできないのが残念です。私のスクリプトではありません。マジックナンバーで複数のポジションをクローズする - ヘルプ
皆さん、こんにちは。
私はmt4プログラミングの初心者で、以下は私の最初のEAです。このEAの目的は、同じマジックナンバーに基づいて、どの通貨ペアであってもすべてのポジションを決済することです。
例えば、マジックナンバー8675310で、EURUSDとUSDCFhの2つのポジションを持っているとします。このEAは、ある利益目標に到達すると、これらのペアをすべて決済することができます。
このEAの問題点は
オープン取引 # 1 EURUSD (クローズ可能)
取引番号2 USDCFhを開く(クローズできない)
2を閉じることができません。
何かアイデアはありますか?
ありがとうございます。
//+------------------------------------------------------------------+
||Closing_Trade_By_Magic_No_v1 .mq4 |です。
|| マイン
//|Forex Trading Software: フォレックス取引プラットフォーム MetaTrader 4
//+------------------------------------------------------------------+
#property copyright "マイン"
#property link "http://www.metaquotes.net"
//---- 入力パラメータ
extern int MagicNumber1=8675310;
extern int Profit1=10;
extern int MagicNumber2=8675311; extern int Profit1=10; extern int MagicNumber2=8675311;
extern int Profit2=15;
extern int MagicNumber3=8675312; extern int Profit2=15; extern int MagicNumber3=8675312;
extern int Profit3=15; extern int MagicNumber3=8675312; extern int Profit3=15
extern int MagicNumber4=8675313;
extern int Profit4=15; extern int MagicNumber4=8675313; extern int Profit4=15;
extern int MagicNumber5=8675314;
extern int Profit5=15; extern int MagicNumber5=8675314; extern int Profit5=15;
extern int MagicNumber6=0;
extern int Profit6=10;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
onScreenComment(98, "Tengak Initialize...");
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
string myMessage="";
myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Profit1,myMessage)となります。
myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage); myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessge);
myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage); myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);
myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage); myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);
myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage); myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessge);
myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage); myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);
onScreenComment(98,myMessage);
//----
//----
return(0);
}
string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )
{
int total = OrdersTotal();
double MyCurrentProfit=0;
文字列MyOrderNo=""。
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == myMagicNumber)
{
MyCurrentProfit += OrderProfit();
MyOrderNo= MyOrderNo + "," + OrderTicket();
}
if(MyCurrentProfit>=myProfit)
CloseAll(myMagicNumber)を実行します。
myMessage="グループポジション番号" + myGroupNumber + " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" ;} if(My CurrentProfit>=myProfit + " + MyMagicNumber)+ "\n" ;
return (myMessage);
}
void CloseAll(int myMagicNumber)
{
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (オーダーマジック番号() == myMagicNumber)
if(オーダータイプ()==OP_BUY)
OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet);
if(OrderType()==OP_SELL)
オーダークローズ(OrderTicket(),OrderLots( ),Ask,5,Violet).OrderClose(オーダークローズ)
}
void onScreenComment(int myEvent, string myComment)
{
switch (myEvent)
{
case 98:Comment(myComment); break;
}
}
//+------------------------------------------------------------------+
メッセージの編集・削除![](https://c.mql5.com/forextsd/smiles/cry_smile.png)
Open Transaction # 1 EURUSD (able to close)
。Open Transaction # 2USDCFh(won't be able to close)
取引番号2を閉じることができません。
何かアイデアはありますか?
注文を決済しようとするとき、EURUSDチャートでEAを実行していると思いますが、これらのポジションは問題なく決済されているので、EURUSDチャートでEAを実行しているのでしょうか。コードがUSDCHF(a little dislexies?) のポジションを決済しようとするとき、間違った買値と売値を使用して います。もし、他の通貨ペアをその通貨と一致しないチャートから決済しようとした場合、決済する前にまず正しい価格を取得する必要があります。
キート
edit: また、通貨(この場合はUSDCHF)は、注文を決済するために正しい価格を取得しようとしている時に、マーケットウォッチウィンドウに表示されている必要があります。もしUSDCHFがマーケット・ウォッチ・ウィンドウに表示されていなければ、そのペアのいかなる相場も得ることはできないでしょう。
cockeyedcowboy ありがとうございます !
"閉じる前に、まず正しい価格を取得する必要が あります"。
上記のニーズを満たすような構文や関数を教えて ください。
次のバーまで取引しない方法
初めてプログラミングをやってみたのですが、一つ問題があります。
- あるバーで取引を終了した場合、新しいバーが開くときにしか新しい取引を開始できません。
以下のように試してみました。
datetime time0=0;
int start()
if (time0 == Time[0]) return;
{
"プログラムコード"
}
time0 = Time[0];
return(0)です。
このビットを削除すると、様々なバーで複数のエントリーが発生します。このビットを入れると、エントリーの数がぐっと減りますが(バックテスト では70回から4回)、エントリーがなくなります。
どなたか、私が何を間違えているのかご存知でしたら教えてください。
ありがとうございました。
下のNewBar()関数を 使えば...。
if(NewBar(){ ............ここでプログラミングをします。
bool NewBar() {
static datetime LastTime = 0;
if (Time[0] != LastTime) {
LastTime = Time[0];
return (true);
} else
return (false);
}
また、一度に1つの注文しかしたくない場合は、未決済の注文をテストするとよいでしょう。
お役に立てれば幸いです。
ラックス
ラックス
この度はお世話になりました。
プログラム上で何が起こっていたのかがわかった気がします。
以前は新しいバーを開始時にチェックしていたので、プログラムは新しいバーの最初のティックをチェックし、他のティックをチェックせずに、私のシグナルと一致するかどうかを確認しました。このため、バックテスト では売買シグナルがほとんど出ませんでした。
現在、コードを正しく配置し、(つまり、私のordersendインストラクションがある場所)それは問題なく動作しているようです。
私の考え方は正しいでしょうか?
エキスパートのコード更新にご協力ください。
シンプルなエキスパートがあります。しかし、私は大きな問題を抱えています - エキスパートは、注文を開く/閉じるに1つだけ試しました。
誰か修正するのを手伝ってくれませんか?
エキスパートが注文を開く/閉じるために5-10回試行する必要があります。
多分、n=試行回数で、"while "は無しでお願いします。
どうもありがとうございました。
損失後のロットを調整する "ための私のコード、ヘルプが必要です。
損失後のロットを調整する "ために以下の私のコードですが、それはテストの間にエラーマッサージ"ArraySort関数の ための不正な開始位置0 "をしました。誰もがそれを修正するために私を助けることができますか? 助けが必要...
double AdjtLotsByWinRate( int magicnumber,double NormLots)
{
int i,counter;
int ProfitAndTime[][2];
double Profits[];
//----
ArrayResize(ProfitAndTime,OrdersHistoryTotal());
for (i=0;i<OrdersHistoryTotal();i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP
{
ProfitAndTime[counter][0]=OrderCloseTime();
ProfitAndTime[counter][1]=OrderProfit();
counter++;
}
}
}
ArrayResize(ProfitAndTime,counter);
ArrayResize(Profits,counter);
ArraySort(ProfitAndTime);
for (i=0;i<counter;i++)
{
Profits=ProfitAndTime[1];
}
//Print(Profits);
int err=GetLastError();
int WinRate_N=0,WinRate_A=5;
double WinRate;
for (i=counter;i<counter-WinRate_A+1;i--)
{
if (Profits>0){
WinRate_N=WinRate_N+1;
}
else if (Profits<0)
{
WinRate_N=WinRate_N-1;
}
else
{
WinRate_N=WinRate_N+0;
}
}
WinRate=WinRate_N/WinRate_A;
double NewLots;
if (WinRate>=0.7)
{
NewLots=NormLots*1.5;
}
else if (WinRate>=0.5 && WinRate<0.7)
{
NewLots=NormLots*1;
}
else if (WinRate>=0.3 && WinRate<0.5)
{
NewLots=NormLots*0.5;
}
else //if (WinRate<0.3)
{
NewLots=NormLots*0.1;
}
return(NewLots);
}