コーディングのヘルプ - ページ 238

 

選択できるオプションを追加することはできないのでしょうか?

例えば

別々、購入、別売り

修正しました。BEはすべて0、または+1、または+2ピップを購入するか、またはすべてのBE 0、1または2ピップを販売?

それは可能ですか?

be.mq4

ファイル:
be.mq4  1 kb
 

こんにちは、Mladen 。

私はFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを書いています。

void OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // なしオープン。

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

&& Ask - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuyOrder();

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

&& OrderOpenPrice() - Bid >= Grid*PipValue*Point

{

{

SellOrder();

}

}

}

return(lastTicket);

その他

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。

//-------------------------------------------------------------

// Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA

//-------------------------------------------------------------

// キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー

#property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1"

#property link

#include

#インクルード

// エクスポートされた変数

extern int OrderId = 1;

extern int Slippage = 2;

extern double Lots = 0.01;

extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能

extern int Grid = 10; // 注文を開くまでの合計距離(pips単位

extern string EAComment = "564テスト";

// ローカル変数

double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。

bool Terminated = false;

string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。

int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。

int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能

int current = 0;

int init()

{

NDigits = Digits;

if (false) ObjectsDeleteAll(); // チャートを消去します。

Comment(""); // チャートを消去します。

}

// エキスパート・スタート

int start()

{

if (Bars < 10)

{

Comment("バーが足りません");

return (0);

if (終端 == true)

{

Comment("EAが終了しました。");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5))PipValue = 10;

IfOrderDoesNotExist2()。

IfOrderDoesNotExist4();

MaximumOrder()。

void IfOrderDoesNotExist2()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

exists = true。

}

}

さもなくば

{

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

if (exists == false)

{

BuyPendingOrder()を実行します。

}

}

void IfOrderDoesNotExist4()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

exists = true。

}

さもなくば

{

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

if (exists == false)

{

SellPendingOrder()を実行します。

}

}

void BuyPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point;

double SL = price - 0*PipValue*Point;

if (0 == 0) SL = 0;

double TP = price + 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);

if (チケット == -1)

{

Print("OrderSend() error - ", ErrorDescription(GetLastError()));

}

}

void SellPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point;

double SL = price + 0*PipValue*Point;

if (0 == 0) SL = 0;

double TP = price - 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);

if (ticket == -1)

{

Print("OrderSend() error - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

OrderCount();

}

void OrderCount()

{

int count = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

count++;

}

}

さもなくば

{

Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print");

}

if (count > MaxOrdersAllowed )

{

DeleteOldestOrder()を実行します。

}

}

void DeleteOldestOrder()

{

datetime lastTime = 0;

int lastTicket = -1; // どれも開いていません。

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ))

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

return(lastTicket);

その他

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

int deinit()

{

if (false) ObjectsDeleteAll();

 
sulaimoney:
こんにちは、Mladen 。

私は主にFX Genを使い、mq4コンパイラやオンラインフォーラムの例を参考にスニペットやコードを使ってEAを作成しています。

void OpenNewTrade()

{ datetime lastTime = 0;

int lastTicket = -1; // なしオープン。

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

&& Ask - OrderOpenPrice() >= Grid*PipValue*Point

{

{

BuyOrder();

}

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

&& OrderOpenPrice() - Bid >= Grid*PipValue*Point

{

{

SellOrder();

}

}

}

return(lastTicket);

その他

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

あなたは、このコードを見てみることができます 日付と注文チケットを使用して、最初に最も古い順序を削除しようとしている、例えば、開かれた順序> 2は、最も古い順序を削除します。

//-------------------------------------------------------------

// Etasoft Inc.Forex EA and Script Generator バージョン4.1 EA

//-------------------------------------------------------------

// キーワードMT4、Forex EAビルダー、EA作成、Expert Advisorデベロッパー

#property copyright "Copyright © 2011, Etasoft Inc.Forex EA ジェネレーター v4.1"

#property link

#include

#インクルード

// エクスポートされた変数

extern int OrderId = 1;

extern int Slippage = 2;

extern double Lots = 0.01;

extern int MaxOrdersAllowed = 2;// 買い注文と売り注文の両方が可能

extern int Grid = 10; // 注文を開くまでの合計距離(pips単位

extern string EAComment = "564テスト";

// ローカル変数

double PipValue=1; // この変数は、5桁のブローカーをサポートするために用意されました。

bool Terminated = false;

string LF = "\n"; // 改行が必要なカスタムブロックやユーティリティブロックに使用します。

int NDigits = 4; // 主にFlexタイプのブロックのNormalizeDoubleに使用されます。

int ObjCount = 0; // チャート上に作成された全オブジェクトの数、ユニークな名前のオブジェクトを作成可能

int current = 0;

int init()

{

NDigits = Digits;

if (false) ObjectsDeleteAll(); // チャートを消去します。

Comment(""); // チャートを消去します。

}

// エキスパート・スタート

int start()

{

if (Bars < 10)

{

Comment("バーが足りません");

return (0);

if (終端 == true)

{

Comment("EAが終了しました。");

return (0);

}

OnEveryTick1();

}

void OnEveryTick1()

{

if (true == false && false) PipValue = 10;

if (true && (NDigits == 3 || NDigits == 5))PipValue = 10;

IfOrderDoesNotExist2()。

IfOrderDoesNotExist4();

MaximumOrder()。

void IfOrderDoesNotExist2()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

exists = true。

}

}

さもなくば

{

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

if (exists == false)

{

BuyPendingOrder()を実行します。

}

}

void IfOrderDoesNotExist4()

{

bool exists = false;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)

{

exists = true。

}

さもなくば

{

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

if (exists == false)

{

SellPendingOrder()を実行します。

}

}

void BuyPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point.Double SL = price - 0*PipValue*Point;

double SL = price - 0*PipValue*Point;

if (0 == 0) SL = 0;

double TP = price + 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);

if (チケット == -1)

{

Print("OrderSend() error - ", ErrorDescription(GetLastError()));

}

}

void SellPendingOrder()

{

int expire = TimeCurrent() + 60 * 0;

double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point.Double SL = price + 0*PipValue*Point;

double SL = price + 0*PipValue*Point;

if (0 == 0) SL = 0;

double TP = price - 0*PipValue*Point;

if (0 == 0) TP = 0;

if (0 == 0) expire = 0;

int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Red);

if (ticket == -1)

{

Print("OrderSend() error - ", ErrorDescription(GetLastError()));

}

}

void MaximumOrder()

{

if (MaxOrdersAllowed> 0)

{

OrderCount();

}

void OrderCount()

{

int count = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

if (OrderType() == OP_BUY || OrderType() == OP_SELL)

{

count++;

}

}

さもなくば

{

Print("OrderSend() error - ", ErrorDescription(GetLastError())).Print("OrderSend() error - ", ErrorDescription(GetLastError()).Print");

}

if (count > MaxOrdersAllowed )

{

DeleteOldestOrder()を実行します。

}

}

void DeleteOldestOrder()

{

datetime lastTime = 0;

int lastTicket = -1; // どれも開いていません。

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket ))

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

if (OrderType() == OP_BUY || OrderType() == OP_SELL )

{

{

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}

}

}

return(lastTicket);

その他

Print("OrderSelect() error - ", ErrorDescription(GetLastError())).Print("OrderSelect() error - ", ErrorDescription(GetLastError()).Print");

}

int deinit()

{

if (false) ObjectsDeleteAll();

}

このような関数を 使用してみてください。

void DeleteOldestOrder()

{

datetime lastTime = Time[0]+Period()*60;

int lastTicket = -1; // None open.

for (int i=OrdersTotal()-1; i >= 0; i--)

{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)

{

lastTime = OrderOpenTime();

lastTicket = OrderTicket();

}

}

if (lastTicket>-1)

if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))

OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);

}
 

Mladenさん、ありがとうございます。

このような長いコードをフォーラムに投稿して申し訳ありません。まだインターフェースに慣れていないのです。ありがとうございました。

 

インジケータが自動的に更新されません。

私の取引に非常に適したインジケータがあります。

残念なことに、このインジケータは自動的には更新されません。常に手動で更新しなければなりません。

この問題を解決する方法はありますか?

それは非常に有用であろう!!

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

追伸:私が持っているすべてを添付しました。

ファイル:
 

彼は通知のSMSを望んでいる。どのようにコードを見ますか?

 
popej30:
彼は通知のSMSを望んでいます。どのようなコードに見えますか?

ポープ30

次のようにします。

SendNotification("notification message that you want to send");

 

あなたの電話番号は?私の番号は0039 555-23-45です。どこに入力するのですか?

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}
 
popej30:
そして、どこに自分の電話番号を入れるのですか?私の番号 0039 555-23-45 です。どこに入力するのですか?

#property indicator_separate_window

#property indicator_minimum -1.1

#property indicator_maximum 1.1

#property indicator_buffers 2

#property indicator_color1 Aqua

#property indicator_color2 Lime

extern int period = 25;

extern int limit = 5000;

double g_ibuf_84[];

double g_ibuf_88[];

double g_ibuf_92[];

int init() {

IndicatorBuffers(3);

SetIndexStyle(0, DRAW_ARROW);

SetIndexStyle(1, DRAW_ARROW);

SetIndexStyle(2, DRAW_NONE);

SetIndexEmptyValue(0, 0.0);

SetIndexEmptyValue(1, 0.0);

SetIndexArrow(0, 233);

SetIndexArrow(1, 234);

SetIndexBuffer(0, g_ibuf_88);

SetIndexBuffer(1, g_ibuf_92);

SetIndexBuffer(2, g_ibuf_84);

IndicatorShortName("BR16");

return (0);

}

int start() {

double ld_72;

double ld_24 = 0;

double ld_32 = 0;

double ld_unused_40 = 0;

double ld_unused_48 = 0;

double ld_56 = 0;

double ld_unused_64 = 0;

double l_low_80 = 0;

double l_high_88 = 0;

for (int li_96 = 0; li_96 <= limit; li_96++) {

g_ibuf_88[li_96] = 0;

g_ibuf_92[li_96] = 0;

}

for (li_96 = 0; li_96 <= limit; li_96++) {

l_high_88 = High;

l_low_80 = Low;

ld_72 = (High[li_96] + Low[li_96]) / 2.0;

if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;

else ld_24 = 0.0;

ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);

g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;

ld_32 = ld_24;

ld_56 = g_ibuf_84[li_96];

}

for (li_96 = 0; li_96 <= limit; li_96++) {

if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;

if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;

}

return (0);

}

これは、あなたがそれを行うことができます良い説明です。

 
Jim Clark:
インジケータが自動的に更新されない。

ここに私の取引に非常に適したインジケータがあります。

残念なことに、彼は自分自身で更新されません。私は常に手動で彼が更新されることをリフレッシュする必要があります。

この問題を解決する方法はありますか?

それは非常に有用であろう!!

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

追伸:手持ちのものをすべて添付しました。

ジム

全体を書き直す代わりに、バーを計算 するための制限を追加し、その後、すべてのこれらのバーが再計算されます。これは、リフレッシュの問題を解決するはずです(ただ、BarsTocalculateを大きすぎず小さすぎずの適度な値に保ってください。私はデフォルトとして1000を使用し、それはそのように問題ないようです)。試してみましょう。

ファイル: