どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1067

 

助けて!お願いインジケータとExpert Advisorの2つのファイルがあります。インジケータ内の関数を#includeで正しく参照するには? iCustomは諸事情により不向きです。これは、インジケーターに書いたものです。

bool BuyTrue(double& переменная, int переменная) export
{
   //тело функции

   return(true);
}   

そして、Expert Advisorにはこのように書きました。

#import "НазваниеИндикатора.ex4"
   bool BuyTrue(double& переменная, int переменная);
if (BuyTrue(переменная, переменная))
Opn_B = true;

しかし、なぜかExpert Advisorが動作せず、テスト 中に価格チャートにインジケータが 表示されない。正しく書けたか、間違いがあればどこが間違いか。

 
AlexeyVik:

ツタ。


持っていないんです。しかし、どこかにファイルがあるのは確かで、そこから記録された情報を入手しています。


 

mt4へのコンパイルをお願いします。

FileClose' - 'void' 型の式が不正 TickToCVS~.mq4 84 12.

ファイル:
 
abeiks:

持っていないんです。しかし、どこかに確実にファイルがあり、そこから記録された情報を得ることができるのです。


私のスクリーンショットはMetaEditorのメニューで、あなたのスクリーンショットはMTのものです。
 
AlexeyVik:

これはEMPTY_VALUEの値です。

どこに飛び出しているのか、探してみてください。

ありがとうございます。あなたのおかげで、問題が解決しました。私のインジケータは、ロードされると、ゼロからではなく、最初のバーから計算します(私は意図的にそうしました)。現在、タイムフレームを変更し、チャートに添付し、ターミナルを再起動すると、バー0にバッファの値をゼロにリセットし、問題は解決しました。
 
AlexeyVik:
私のスクリーンショットはMetaEditorのメニューで、あなたのスクリーンショットはMTのものです。
そうなんだ!ありがとうございました。
 
この注文がトリガーされた場合、履歴にある注文の開始価格ではなく、未決済ポジションの価格を取得するにはどうすればよいですか?添付の関数では、注文がトリガーされた場合、この注文はポジションでしか見つけることができないため、動作しません。また、ポジションにはオープン ポジションの価格のみが 表示され、注文価格は表示されません。
double GetPriceLastCloseOrder(string sy="", int mn=-1) {
  datetime t=0;
  int      i, k=OrdersHistoryTotal(); 
  double r=0;

  if (sy==NULL) sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()>1 && OrderType()<6) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderOpenPrice();
          }
        }
      }
    }
  }
  return(r);
}  
 

Hi guys, my question is, I can't modify an order. There are two aspects to it, I don't understand the mathematics of modification, please explain it to me.

私の考えでは、SL= IF ORDERSELEKT,Bid-ORDERSTOPLOS*POINT,DIGITS です。

第二の側面:XBMSの映像から学んだこと

私はテスターの変数の値を変更しようとしなかった方法 eror 130 ストップロスやそのようなデタラメを修正しない

2016.06.28 21:42:23.402 2016.06.23 00:00 trade RSI 入力: Lots=0.1; Slippage=5; StopLoss=10; TakeProfit=30; RSIPeriod=7; Magic=1087;

桁からの乗算があり、SLを間違えた場合の関数もありますが


extern double Lots = 0.1;

extern int Slippage = 10;

extern int StopLoss = 10;

extern int TakeProfit =30;

extern int RSIPeriod = 7;

extern int Magic =1087;

ダブルMaRSI。


int TP,SL;

bool tfu;


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

//| 専門家による初期化機能

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

int OnInit()

{

if(Digits == 3||Digits == 5)

{

スリッページ *= 10;

TakeProfit *= 10;

StopLoss *= 10;

}

return(INIT_SUCCEEDED);

}

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

//| 専門家による初期化関数

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

void OnDeinit(const int reason)

{


}

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

//| エキスパートティック機能

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

void OnTick()

{

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

//オープンセル

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

MaRSI=iRSI(Symbol(),0, RSIPeriod,PRICE_CLOSE,1);

if(CountTrades() <= 0&MaRSI<=30 )

{

if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,「テスト」,マジック,0,グリーン))

{ int ticket = OrderTicket();

SL = NormalizeDouble( Ask - StopLoss*Point,Digits)。

TP = NormalizeDouble( Ask + TakeProfit*Point,Digits)。

修正注文(ticket,OrderOpenPrice(),SL,TP,0,Black)です。

}

}// if(CountTrades <= 0&MaRSI>=70 )

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

//オープン・バイ

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


をクリックします。


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

//+オーダーカウンター

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


int CountTrades ()

{

int count = 0;

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

{

if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//オーダーが我々のものであれば

count++;//カウンタを増加させる

}//select インデックス順

}// order.i===1 順目。

return(count);//注文件数を返す

}// 機能

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

//エラー処理付き発注機能

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

int SendOrder( string symbol,int cmd,double volume,double price,int slippage,double stoploss,

double takeprofit,stringコメント,int magic=0,datetime期限=0,color arrow_color=CLR_NONE)

{

int err = GetLastError()。

err =0;

bool exit_cikl = false;

int ticket = -1;

int Retry = 10; //注文を確定するまでの試行回数

int cnt = 0; //トライ回数

if(cmd == OP_BUY || cmd == OP_SELL)

{

while(!exit_cikl)

{

ticket = OrderSend(symbol,cmd,volume,price,slippage,stoploss,takeprofit,comment,magic,expiration,arrow_color);

err= GetLastError()。

スイッチ

{

case ERR_NO_ERROR:

exit_cikl = trueです。

が壊れる。

{ case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

cnt++です。

が壊れる。

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

RefreshRates()。

を続ける。

のデフォルトになります。

exit_cikl = trueです。

が壊れる。

}// switch switch(err)

if(cnt > 再試行)

exit_cikl = trueです。

if(!exit_cikl)

{

Sleep(1000)です。

RefreshRates()。

}//ループを抜けない場合 if(!exit_cikl)

さもなくば

{

if(err != ERR_NO_ERROR)

{

Print("Error : " + IntegerToString(err));

}// まだエラーがある場合 if(err != ERR_NO_ERROR)

}// OTHERWISE

if(err==ERR_NO_ERROR)

{

if( OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true)

return(ticket)です。

}// if(err==ERR_NO_ERROR)

Print("Error opening order after " + IntegerToString(cnt) +"attempts");

return(-1)です。

} //cycle while

}// 注文の種類が「買い」または「売り」の場合

return(ticket)です。

}// SendOrder 機能


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

//関数 modify order

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

注文の変更(int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

{

価格 = NormalizeDouble(price,Digits);

stoploss = NormalizeDouble(stoploss,Digits)。

takeprofit = NormalizeDouble(takeprofit,Digits)。

CheckValidStop(Symbol(),price,stoploss);//ストップ安を変更する関数です。

int err = GetLastError()。

err = 0 ;

int Retry = 10;

int cnt = 0;

bool exit_cikl = false;

bool result;

while(!exit_cikl)

{

result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color);

err = GetLastError()。

if(result == true)

{

Print("注文番号 "+ IntegerToString(ticket), "変更に成功");

return(true)です。

}

スイッチ

{

case ERR_NO_ERROR:

exit_cikl = trueです。

が壊れる。

{ case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

cnt++です。

が壊れる。

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

RefreshRates()。

を続ける。

のデフォルトになります。

exit_cikl = trueです。

が壊れる。

}// switch switch(err)

}// while(!exit_cikl)

if ( err != ERR_NO_ERROR)

{

Print("Error modifying order # " + IntegerToString(ticket));

Print("Error code:" + IntegerToString(err));

}

}//(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

さもなくば

{

Print("注文の選択に失敗しました、チケット = " + IntegerToString(ticket));

return(false)です。

}//if something goes wrong

return(true)です。

}// function modify

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

//ChtckValidStop

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

void CheckValidStop(文字列シンボル,double価格,double&sl)

{

if(sl==0)

を返します。

double min_stop_server = MarketInfo(symbol,MODE_STOPLEVEL)*MarketInfo(symbol,MODE_POINT).MARKET_STOP_SERVER は、MarketInfo(symbol,MODE_POINT)と同じです。

if(MathAbs(price-sl) <= min_stop_server)

{

if(price>sl)

sl = 価格 - min_stop_server;

else sl = sl + min_stop_server;

}// if(MathAbs(price-sl) <= min_stop_server)

sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS))

}// 機能


 

アドバイスください!

取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02

Asc価格がSELL注文のSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。

 
m8akca:

アドバイスください!

取引履歴に2つの注文があります:1) 売り № tic 415 STOPLOSS 1.1000 lot 0.01 2) 売り № tic 418 STOPLOSS 1.1000 lot 0.02

Asc価格がSELLオーダーのSTOPLOSSと等しい場合、X=tick、Y=STOPLOSS、B=lotという変数を割り当てなければならない。最初の値を1次、次に2次の値を割り当てる方法。私の場合、最初の注文には必ず値が割り当てられます。

このトピックは、すでに何かを書いているけれど、なかなか思い通りにいかないという方のために用意しました。何が問題なのか、他の人がわかるように、コードを送信してください。

そして、オーダーメイドで書いてもらうなら、そこが 一番です。

理由: