bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
の場合、両方の値ともTrueを返します。
条件付きで最後に閉じた注文だけを 返すようにするにはどうしたらよいでしょうか。
私の都合で、コードにロットチェックを追加しました。
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1, int ll=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ll<0 || OrderLots()==ll) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
вот так работает без проблем
bool BuystopLotA=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop(NULL,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake(NULL,OP_SELL,MagBuy,LotC);
при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop(NULL,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake(NULL,OP_BUY,MagBuy,LotB);
начинает возвращять True не по одному а по двум запросам
BuyTakeLotB и BuystopLotA
ヘルプは、フラクタルを通じて顧問を持ってください。 私は良いパラメータをピックアップし、それがマーチンゲールの多くを設定することを追加する必要がある(あなたが失うとき2以上)。または顧問の電源を与えるだけで実行する2を待たずにロットを倍増します(利用可能な場合).ここでは、顧問です。
//+------------------------------------------------------------------+
| フラクタルズ.mq4 | フラクタルズ.mq4
| TO
//| http://www.forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#property copyright"TO"
#プロパティリンク "http://www.forex-tradexperts-to.narod.ru"
#include <WinUser32.mqh>.
extern int TP_Fract_3=300;
extern int SL_Fract_3=200;
extern int TP_Fract_11=500;
extern int SL_Fract_11=300;
extern bool buy_Fract_3=true;
extern bool sell_Fract_3=true;
extern bool buy_Fract_11=true;
extern bool sell_Fract_11=true;
extern bool podtvergdenie=false;
extern int tofract=10;
extern double lots=0.1;
extern int ID = 5452;
ストリング・コム
見開き2ページ
int init()
{
com=DoubleToStr(ID,0)とする。
spread=MarketInfo(Symbol(),MODE_SPREAD)*Point。
return(0)です。
}
int deinit()
{
return(0)です。
}
datetime t1,t2=0;
bool order(double price,int type,string c,int m)
{
int i;
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==price && OrderType()==type)return(false);
if(i=0)return(true)。
}
if(OrdersTotal()==0)return(true)。
}
int start()
{
int i,ret;
t1=Time[0]です。
if(t1!=t2)
{
int fract_buy_3=iHighest(Symbol(),Period(),MODE_HIGH,5,1);
int fract_sell_3=iLowest(Symbol(),Period(),MODE_LOW,5,1);
int fract_buy_11=iHighest(Symbol(),Period(),MODE_HIGH,21,1);
int fract_sell_11=iLowest(Symbol(),Period(),MODE_LOW,21,1);
if( fract_buy_3==3 && buy_Fract_3==true)
{
if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol()、OP_BUYSTOP、lots, High[fract_buy_3]+tofract*Point+spread,10,高[fract_buy_3]+tofract*Point-SL_Fract_3*Point,高[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_3]+tofract*Point+spread, High[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue) を実行。
が壊れる。
}
if(i=0)if(オーダー(高値[fract_buy_3]+tofract*Point+spread,4,com,5))
{
if(podtvergdenie)
{
ret=MessageBox("シグナル at "+Symbol()+" H1 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION");
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);
}
}
}
if( fract_sell_3==3 && sell_Fract_3==true)
{
if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))オーダー送信(Symbol()、OP_SELLSTOP、lots、Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)
{
OrderModify(OrderTicket()、Low[fract_sell_3]-tofract*Point、Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point、Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point、0、Red)。
が壊れる。
}
if(i=0)if(オーダー(Low[fract_sell_3]-tofract*Point,5,com,5))
{
if(podtvergdenie)
{
ret=MessageBox("シグナル on "+Symbol()+"H1 SELLSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,5);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point*Point,com,5);
}
}
}
if( fract_buy_11==11 && buy_Fract_11==true)
{
if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))orderSend(Symbol(),OP_BUYSTOP,lotSoft, High[fract_buy_11]+tofract*Point+spread,10,高値[fract_buy_11]+tofract*Point-SL_Fract_11*Point,高値[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)
{
OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue) を実行。
が壊れる。
}
if(i=0)if(オーダー(ハイ[fract_buy_11]+tofract*Point+spread,4,com,21))
{
if(podtvergdenie)
{
ret=MessageBox("シグナル on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);
}
}
}
if( fract_sell_11==11 && sell_Fract_11==true)
{
if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))orderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21)。
for(i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)
{
OrderModify(OrderTicket()、Low[fract_sell_11]-tofract*Point、Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point、Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point、0、Red) を実行しました。
が壊れる。
}
if(i=0)if(オーダー(Low[fract_sell_11]-tofract*Point,5,com,21))
{
if(podtvergdenie)
{
ret=MessageBox("シグナル on "+Symbol()+"H4 BUYSTOP "+"{Set Order?", "Signal", MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,21);
}
if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point*Point,com,21);
}
}
}
t2=Time[0]です。
}
return(0)です。
}
ロシア語書くの苦手なんです!ごめんなさい。
ロシア語書くの苦手なんです、ごめんなさい!(笑
クリモフ・ブロックで助けられる人を教えてください。問題は、最後に閉じた時の値を返さないことですが、条件によって最後に閉じた時の値です
というわけで、2つの条件で
の場合、両方の値ともTrueを返します。
条件付きで最後に閉じた注文だけを 返すようにするにはどうしたらよいでしょうか。
私の都合で、コードにロットチェックを追加しました。
クリモフ・ブロックで助けられる人を教えてください。問題は、最後に閉じた時の値を返さないことですが、条件によって最後に閉じた時の値です
というわけで、2つの条件で
の場合、両方の値ともTrueを返します。
条件付きで最後に閉じた注文だけを 返すようにするにはどうしたらよいでしょうか。
私の都合で、コードにロットチェックを追加しました。
この機能にロットのチェックを追加したのでしょうか?今、彼らは渡されたロットで最後のクローズポジションを チェックし、ロットはおそらく常にゼロ、または整数に等しいです。変数 ll は double 型でなければならない。なぜ、ここでロットチェックが必要なのでしょうか?
実現したいことを書けば、教えてくれる :)
はい、そしてなぜlotがintなのでしょうか?敷地はずっと二重になっている。
片方の注文が残っているときに、どちらの注文が残っているかを判断して、反対側の注文を検索する、こんなこともできますね。
クリモフ・ブロックに協力できる人を教えてください・・・。
自分で追加した機能でロットを確認する?今、彼らは渡されたロットで最後のクローズポジションをチェックし、ロットはおそらく常にゼロ、または整数に等しいです。変数 ll は double 型でなければならない。また、なぜここでロットチェックが必要なのでしょうか?
実現したいことを書けば、教えてくれる :)
すでにすべて達成しましたが、1つだけバグがあります。それは、ある瞬間に必要のない注文がポップアップで表示されることです。
intに変更しようとしたのですが、元々はdoubleだったのですが、探してみたら返すのを忘れていました、ロットチェックなしで別の関数を使っても結果は変わらないので、もしかしたら正しくチェックできていなかったのかもしれません、バグの内容を理解するのを助けてください
リクエストはこのようなものです。
はい、そしてなぜlotがintなのでしょうか?敷地はずっと二重になっている。
片方の注文が残っているときに、どちらの注文が残っているかを判断して、反対側の注文を検索する、こんなこともできますね。
というのも、オープンのための条件が2つである可能性があり、この検索では何も見つけることができないからです。
違うスレッドに重複して投稿するのはやめましょう、悪質です。
すみません、違うスレッドの同じ書き込みを削除するのを忘れないようにもっと頑張ります。