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

 
g.pociejewski:
[lang=pl]さらに質問ですが、あなたの時間はGMTなのでしょうか?もしGMTでないなら、このEAを少し変更するつもりです。

私はちょうどそれを作ったので、私はそれをチェックし、すべてのものが大丈夫なら私にPMをお願いします。

Distance beetwen low and high stopLoss and TP I made as extern variabels.

ありがとうございます。

親愛なるGrzesiek

このインジケータをexpertsフォルダに貼り付け、今日その動作をモニターしてみました。このインジケータが持つ問題は、最初の取引を行い、ストップまたはt/pで注文を閉じると、すぐにEAが最近の注文を閉じた価格で再び取引を開始することです。どうすれば、コード内でそれを止めることができるのでしょうか?

 

どなたか教えてください。

こんにちは。

このコードには1つの問題があります。取引を実行する ときは問題ありませんが、注文を再度クローズすると、EAは前の注文がクローズされたときの価格と時間で新しい取引を開始します。コードにエラーは見当たりません。これを書いた人はとても忙しい人で、オンラインではありません。どなたか、何が問題なのかご指摘いただけないでしょうか?

extern double stopLoss = 35.0;

extern double takeProfit = 50.0;

extern string Begin="00:00".extern string End="08:00 "です。

外部文字列End="08:00";

extern double distance = 5;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 1;

int magic = 123;

int slippage = 1;

文字列コメント = "テスト";

int ticket;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

//----

if(isGoodTime(Begin,End))

{

if(!cond)

{

low = Bid;

high = Ask;

}

cond = trueです。

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((high - low)*1000>distance)

{

cond2 = trueです。

}

if(!isGoodTime(Begin,End))

{

cond = falseです。

}

if(!isGoodTime(Begin,End)&&cond2)の場合。

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0010))

{

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit), comment,magic).を送信します。

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0).注文の変更。

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.0010)

{

if(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic).のようになります。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0).注文を変更します。

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) { (文字列)

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true)を返します。

}

return(false)。

}

int countOrders(int oMagic,int oType) { {

int count=0;

for(int i=0;i<オーダートータル();i++) {

if(オーダーセレクト(i,SELECT_BY_POS)){。

if(オーダーマジック番号()==oMagic) { (オーダーマジック番号()==oMagic))

if(OrderSymbol()==Symbol()){。

if(OrderType()==oType || oType<0)){

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

 

Avasysさん、こんにちは。

あなたの説明に基づいて、それは正確にそれが行うようにプログラムされているもの(アスクが高値より高いときに購入し、入札が低値より低いときに販売する)それは基本的にそれぞれ、高値と安値が破られると購入と販売を継続する私の知る限り、コードには何も問題はありません。

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

 
Avasys:
コメントありがとうございます。

一日に一度だけ、最初のブレイクアウトだけを取引するようにコードに指示する方法はありますか?

このコードの著者は非常に忙しい男であり、それが見えるように多くの時間を貢献することができませんでした。

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

[lang=pl]//+------------------------------------------------------------------+

//|シンプルなEA.mq4||。

//| 著作権 © 2011, luktom.biz|...

//|www.luktom.biz/en|

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

#property copyright "著作権 © 2011, luktom.biz."。

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00"。

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 1232344524285020;

int スリッページ = 1;

文字列コメント = "";

int ticket;

int short = 0;

int long = 0;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

Print(AccountCurrency())を実行。

//----

if(isGoodTime(Begin,End))

{

short = 0;

long = 0;

if(!cond)

{

low = Bid;

high = Ask;

}

cond = trueです。

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((high - low)*1000>distance)

{

cond2 = trueです。

}

if(!isGoodTime(Begin,End))

{

cond = falseです。

}

if(!isGoodTime(Begin,End)&&cond2)の場合。

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic) を送信します。

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0).注文の変更。

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

if(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0).注文を変更します。

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) { (文字列)

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true)を返します。

}

return(false)。

}

int countOrders(int oMagic,int oType) { {

int count=0;

for(int i=0;i<オーダートータル();i++) {

if(オーダーセレクト(i,SELECT_BY_POS)){。

if(オーダーマジック番号()==oMagic) { (オーダーマジック番号()==oMagic))

if(OrderSymbol()==Symbol()){。

if(OrderType()==oType || oType<0)){

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

これでEAは1日に1ポジションしか開かなくなりました。メールについてのご質問ですが、フォーラムのどこかに私の投稿があります:)

もし見つかったら教えてください。

乾杯。

Grzesiek[/lang]

 
Pip:
こんにちは、Avasys。

私の知る限り、コードには何の問題もありません。あなたの説明に基づいて、それはそれが行うようにプログラムされている正確に行う(アスクが高値より高いときに買い、入札が低値より低いときに売る)それは基本的に、それぞれ高値と安値を更新すると購入と販売を継続することです。

乾杯。

コメントありがとうございます。

一日に一度だけ、最初のブレイクアウトだけを取引するようにコードに指示する方法はありますか?

このコードの著者は非常に多忙な男であり、彼はそれが見えるように多くの時間を貢献することができませんでした。

そして、私が気づいたことは、コードで示された時間の間の範囲が60ピップ以上であるにもかかわらず、システムはまだ取引、それだけで特定の時間(コードで示され、開始と終了時間を参照)間の範囲が60ピップ未満である場合に取引されている取引を実行する ことです。

ヘルプをお願いします。

 
g.pociejewski:
[lang=pl]//+------------------------------------------------------------------+

//| シンプルなEA.mq4 |。

//| Copyright © 2011, luktom.biz |.

//|www.luktom.biz/en|

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

#property copyright "著作権 © 2011, luktom.biz."。

#property link "http://www.luktom.biz"

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin="2:00";

extern string End="10:00"。

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false;

double low;

double high;

extern double lots = 0.1;

int magic = 1232344524285020;

int スリッページ = 1;

文字列コメント = "";

int ticket;

int short = 0;

int long = 0;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

return(0);

}

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

//| エキスパート初期化関数

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

int deinit()

{

//----

Print(countOrders(magic,OP_BUY));

//----

return(0);

}

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

//| エキスパートスタート機能

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

int start()

{

Print(AccountCurrency())を実行。

//----

if(isGoodTime(Begin,End))

{

short = 0;

long = 0;

if(!cond)

{

low = Bid;

high = Ask;

}

cond = trueです。

if(Bid < low) low = Bid;

if(Ask > high) high = Ask;

}

if((high - low)*1000>distance)

{

cond2 = trueです。

}

if(!isGoodTime(Begin,End))

{

cond = falseです。

}

if(!isGoodTime(Begin,End)&&cond2)の場合。

{

if(countOrders(magic,OP_SELL) == 0 )

{

if(Bid<=(low-0.0005) && short == 0)

{

short++;

if(isECN == false)

{

OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,sltpValue(Ask+ stopLoss*Point,stopLoss) ,sltpValue(Ask- takeProfit*Point,takeProfit),comment,magic) を送信します。

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Ask +stopLoss*Point, stopLoss),sltpValue(Bid- takeProfit*Point, takeProfit),0).注文を変更します。

}

}

}

if(countOrders(magic,OP_BUY) == 0)

{

if((Ask-high)>=0.005 && long ==0)

{

long++;

if(isECN==false)

{

OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,sltpValue(Ask - stopLoss*Point, stopLoss),sltpValue(Bid+ takeProfit*Point,takeProfit),comment,magic);

}

if(isECN)

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,comment,magic)。

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - stopLoss*Point, stopLoss),sltpValue(Ask+ takeProfit*Point, takeProfit),0).注文を変更する。

}

}

}

}

//----

return(0);

}

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

bool isGoodTime(string Begin, string End) { (文字列)

if(TimeCurrent()>StrToTime(Begin) && TimeCurrent()<StrToTime(End)) {

return(true)を返します。

}

return(false)。

}

int countOrders(int oMagic,int oType) { {

int count=0;

for(int i=0;i<オーダートータル();i++) {

if(オーダーセレクト(i,SELECT_BY_POS)){。

if(オーダーマジック番号()==oMagic) { (オーダーマジック番号()==oMagic))

if(OrderSymbol()==Symbol()){。

if(OrderType()==oType || oType<0)){

count++;

}

}

}

}

}

return(count);

}

double sltpValue(double w1, int w2)

{

if(w2 == 0)

return (0);

return (NormalizeDouble(w1, Digits));

}

これでEAは1日に1ポジションしか開かなくなりました。メールについてのご質問ですが、フォーラムのどこかに私の投稿があります:)

もし見つかったら教えてください。

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

Grzesiek[/lang]さん

ありがとうございます。

私はここでコード全体をコピーし、mq4ファイルに貼り付けましたが、私はそれが動作しませんでした、それはex4ファイルを作成せず、エキスパートアドバイザーマニュでオンになっていない。そこで、mq4ファイルのようなものをアップロードすることができますか、またはコードに何かありますか、私は数回試してみましたので。

 

チャート上のマウスクリックのx,y位置を検出する

MT4でマウスクリックの位置を検出することは可能でしょうか? WindowOnDropのことではありません。 x,yの画面座標がわかれば、それに対応するPrice/Timeに変換できるのでしょうか?

ご教授のほど、よろしくお願いいたします。

よろしくお願いします。

Tiffany

 

親愛なる友人へ

今日、月曜日にコード(木曜日と 金曜日に動作した古いもの)が全く動作しませんでした。

私は手動でトレードを入力しました。

 

シンプルなシステム。EAをほとんど必要としない

以下はロジックです。

GMT 02:00と10:00の間のレンジが60pips以下の時に取引し、価格が最小-5pipsラインを割ったら売り、価格が最大+5pipsラインを割ったら買いを入れる。そして、1日に1回だけ取引を行い、取引がキャンセルされても、ストップで閉じられても、利益を上げられても、1日に1回だけ注文します。

ここにコードがありますが、動作しません。MT4のEA MANUでは、アイコンが非アクティブで、expertsフォルダにex4ファイルがありません、何が間違っているのか理解できません。

extern double stopLoss = 300.0;

extern double takeProfit = 500.0;

extern string Begin = "2: 00";

extern string End = "10: 00";

extern double distance = 60;

bool isECN = true;

bool cond = false;

bool cond2 = false。

double low;

double high;

extern double lots = 0.1;

int magic = 1232344524285020;

int スリッページ = 1;

文字列コメント = "";

int ticket;

int short = 0;

long int = 0;

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

//| エキスパート初期化関数

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

int init()

{

//----

//----

(0) を返します。

}

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

//| エキスパート初期化関数

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

int deinit ()

{

//----

Print (countOrders (magic, OP_BUY));

//----

(0) を返します。

}

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

//| エキスパートスタート機能

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

int start()

{

Print (AccountCurrency ());

//----

if (isGoodTime (Begin, End))

{

short = 0;

long = 0;

if (! cond)

{

low = Bid;

high = Ask;

}

cond = trueです。

if (Bid < low) low = Bid;

if (Ask > high) high = Ask;

}

if ((高-低) * 1000 > 距離)

{

cond2 = true。

}

if (! isGoodTime (Begin, End))

{

cond = falseです。

}

if (! isGoodTime (Begin, End) & & cond2)

{

if (countOrders (magic, OP_SELL) == 0)

{

if (ビッド ≪ = (CRL-0.0005) & & ショート == 0)

{

short + +;

if (isECN == false)

{

OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Ask-takeProfit * Point, takeProfit), comment, magic).を送信します。

if (isECN)

{

ticket = OrderSend (Symbol (), OP_SELL, lots, Bid, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Ask + stopLoss * Point, stopLoss), sltpValue (Bid-takeProfit * Point, takeProfit), 0)です。

}

}

}

if (countOrders (magic, OP_BUY) == 0)

{

if ((Ask-high) > = 0.005 & & long = = 0)

{

long + +;

if (isECN == false)

{

OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, sltpValue (Ask-stopLoss * Point, stopLoss), sltpValue (Bid + takeProfit * Point, takeProfit), comment, magic).を送信します。

}

if (isECN)

{

ticket = OrderSend (Symbol (), OP_BUY, lots, Ask, slippage, 0,0, comment, magic);

OrderSelect (ticket, SELECT_BY_TICKET);

OrderModify (ticket, OrderOpenPrice (), sltpValue (Bid-stopLoss * Point, stopLoss), sltpValue (Ask + takeProfit * Point, takeProfit), 0)です。

}

}

}

}

//----

(0) を返します。

}

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

bool isGoodTime (文字列, 文字列, Begin, End) {

if (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime () (End)) { (TimeCurrent () > Localtime (Begin) & & TimeCurrent < Localtime (End) )

return (true);

}

return (false);

}

int countOrders (int, int oMagic oType) { { { count = 0; int count = 0; int oMagic oType = 0

int count = 0;

for (int i = 0; i < OrdersTotal (); i ++) { { { { { for (int i = 0; i < OrdersTotal (); i ++)

if (オーダーセレクト (i, SELECT_BY_POS)) {

if (オーダーマジック番号() == oMagic) {。

if (オーダーシンボル() = the = シンボル()){ {。

if (オーダータイプ () == oType || oType < 0) { {.

count ++;

}

}

}

}

}

return (count);

}

double sltpValue (double, int w1 w2)

{

if (w2 = = 0)

return (0);

return (NormalizeDouble (w1, Digits));

}

 

フォレックス・ドットコム EAs

私は馬鹿です。 間違ったフォーラムに投稿してしまいました...そしてプログラミングフォーラムに移動させる方法がわかりません。 ご迷惑をおかけして申し訳ございません。

私は3年間スポットFXの取引をしており、2つのEAを開発しました。 これらのEAはGlocap、FXCM、Alpari(私は米国在住なので、ブローカーの選択はやや制限されます)で問題なく動作しています。 さらに、私は手数料がスプレッドに組み込まれたMT4口座を希望しています(個人的な好みです)。

私は最近、Forex.com(Gain Capital)のデモ口座でこれらのEAをテストしました。 どちらのEAも問題なく動作し、プログラムされたルールに従って取引されました。 しかし、Forex.comでライブ口座を開設したところ、EA#1は正常に動作しなくなりましたが、EA#2は正常に動作しました。 EA #1はForex.comのストラテジーテスターでは正常に動作しますが、それがあまり重要でないことは分かっています。 両方の EA が同じコードを使用して、取引を開始し(EA #1 のエラーは取引を開始しようとしたときに発生します)、ロットサイズを設定し、取引を監視して取引を終了するので、この全体は私にとって非常に奇妙なことなのです。以下、両EAの情報を少し紹介します。

EA #1 EUR/JPY 一目インジケーターを使用しています。

EA #2 EUR/USD 3本の移動平均線とMACDを使用しています。

前にも言ったように、EA#2はプログラムされたルールに従って、うまく取引しています。 EA#1が取引を開始しようとすると、次のようなエラーメッセージが表示されます。2011.11.21 17:00:02 Ichimoku_1700Eastern EURJPYpro,H1: Ichimoku_Open EA for EURJPYpro:BUY注文を開く際にエラーが発生しました。(133)取引は無効 です /// 103.7210の場合

さらに、EA #2がトレードを行おうとすると、Expertsログは常に、エラーを投げるトレードの直前にstd.libがロードされていることを示します(EA #1ではこれは起こりません): 2011.11.21 17:00:02 stdlib EURJPYpro,H1: loaded successfully(ロード成功

ここで、このパズルの最後のピースがあります:EA #2は取引を開始しますが、東部標準時の1700には開始されません。 投げられたエラーはすべて、東部時間1700に開こうとした取引で発生しています(これは偶然かもしれません)。

EA を分解し、ゼロからコードを入力し直し、EA #1 のコードを EA #2 にコピーしましたが、何も問題を解決できないようです。 Forex.comは、これを「EAサポート」と見なし、提供しないので、手助けしようとはしません。 このエラーについて私がインターネット上で見つけることができるものでは、a)ブローカーが EA 取引を許可していない(これは真実ではないことを知っています)、または b)取引が Instant Execution ブローカーで動作しないストップやリミットを送信している(取引はストップやリミットを送信しない)ことを意味します。 Forex.com は、取引日中いつでも取引を中断することはないと言っています。

このグループに対する私の質問は次のとおりです。

1. この問題に遭遇したことがある方はいらっしゃいますか?

2. 2. もしそうなら、解決するために何をしましたか?

3. 3. この問題に遭遇したことがない場合、何が原因だと思われますか?

私が見ていないだけで、きっと何か簡単なことなのでしょう。 ご意見、ご感想、ご感想をお待ちしております。