コーディングの方法は? - ページ 135

 

コンパイル時のエラーについて

皆さん、こんにちは。

以下のエラーが発生しました。

'<'-different types in comparsion (比較で異なるタイプ)

以下の行を修正しました。

(NonLagMA_2D_S2&&D_S2Switch==1)

(Price_NowD_S2&&D_S2Switch==1)

どこが問題なのでしょうか?

mqlファイルをアップロードすることができません。それは私のスクリプトではありません

 
:: 異なる型のものを比較するわけですから、整数と整数、倍数と倍数、文字列と文字列...こんな感じでないといけませんね...

IN10TION

Badguy:
みなさん、こんにちは。

以下のエラーが発生しました。

'<'-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;

}

}

//+------------------------------------------------------------------+

メッセージの編集・削除

 
このEAの問題点は、

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 "は無しでお願いします。

どうもありがとうございました。

ファイル:
test.mq4  9 kb
 

損失後のロットを調整する "ための私のコード、ヘルプが必要です。

損失後のロットを調整する "ために以下の私のコードですが、それはテストの間にエラーマッサージ"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);

}