マルチカレンシーアドバイザーに関する質問 - ページ 3

 

komposterさん、ありがとうございます。やり始めた!?

しかし、ここでまた新たな疑問が!私のExpert Advisorでは、ポジションのオープニング ブロックとトレイリングバーが別々に設定されています。

int start()
  {
// ЗАДАЕМ ПЕРЕМЕННЫЕ ДЛЯ ВСЕХ ПАР
 
 
 // ОТКРЫВАЕМ ПОЗИЦИИ ПО ВСЕМ ПАРАМ
 
//----------------------------------------------
// -------- ТРЕЙЛИНГ СТОПЫ -----------------------
if (UseTrailing_ == True)                                             {                  
for (int r=0; r<OrdersTotal(); r++)                                    {
    if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES))                     {
//--------------------------------------------------
     if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==MagicGBPUSD)     
      {  Трейлинг по фунту }
//--------------------------------------------------
     if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==MagicEURUSD)     
      {  Трейлинг по евро }
//--------------------------------------------------------------------
                                                                       }
                                                                      }
                                                                     }
//----------------------------------------------------------------------
   } 
  return(0);
しかし、私はトロールにコードの一部(例えば、ポンド用)を入れました -

double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

でも、この部分はGBPでポジションを建てたときにすでに使っています。同じトレーリングストッパーをもう一度使ってもいいのでしょうか?それとも、同じ末尾のスライスを、値の名前を少し変えて、ポンドに再入力する必要があるのでしょうか?

 
rid:
しかし、私は、あるコード(例えば、ポンド用)を、末尾の-に入れました。
double bid_GBP = MarketInfo("GBPUSD", MODE_BID);
 double ask_GBP = MarketInfo("GBPUSD", MODE_ASK);
 double point_GBP =MarketInfo("GBPUSD",MODE_POINT);

でも、この切り口は以前、ポンドでポジションを建てたときにすでに使っています。これでまた同じ作品をトローリングで使うことができるのでしょうか?それとも、ポンド用のトロールで、これらの値の名前を少し変えて、同じ作品を再入力しなければならないのでしょうか?

start()関数の一番最初に「このビット」を挿入し、すべてのブロックで変数値を使用することができます。
 

ご回答ありがとうございました。コンポスター

最後に重要な質問をします。(押し付けがましいようで恐縮ですが...)-。

3つ目のペアについては、私は(いろいろな理由から)末尾のライブラリを呼び出すことにしています。例えば librares フォルダから。

この場合、どうすればいいのでしょうか?このペアのために、ライブラリ内部で同じものを指定する必要があるのでしょうか?

//RefreshRates();
 double bid = MarketInfo("USDCHF", MODE_BID);
 double ask = MarketInfo("USDCHF", MODE_ASK);
 double point =MarketInfo("USDCHF",MODE_POINT);

をクリックし、それに応じてシンボルとマジックを変更します。

... .... .....
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        if (OrderType()==OP_BUY) {
          if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
            if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
              ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy); 
 .... ... ...
 
rid:

3組目については、私は(いろいろな理由から)トレーリング・ライブラリと呼んでいます。librarisフォルダから、など。
この場合、どうすればいいのでしょうか?ライブラリ内でも同様に設定する必要があるのでしょうか

ライブラリに依存します。非ネイティブの文字順序を扱う方法を知っていれば、問題ないでしょう。そうでない場合は、悪いことになります ;)
 

これがキムの3段出力ライブラリです。今、私はコードの中に入ってみました。どこでもシンボルの代わりにペアの名前を設定し、マジックの代わりに自分のペアのマジックを設定しました。

//+------------------------------------------------------------------+
//|                                                  a-TLE_v.1.6.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  v.1.6  Три уровня переноса стопа.                               |
//| 23.11.2005 v.a1.6  Реализация в виде универсального модуля.      |
//|                                                                  |
//|   Для использования добавить строку в модуле start               |
//|   if (UseTrailing) TrailingPositions();                          |
//+------------------------------------------------------------------+
 
//------- Внешние параметры модуля - уровни переноса--------------------
... ... ... ...
 
//+------------------------------------------------------------------+
//| Сопровождение позиций                                            |
//+------------------------------------------------------------------+
void TrailingPositions()                                  {
  for (int i=0; i<OrdersTotal(); i++)                       {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))           {
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
        ThreeLevelSystemOfOutput();
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Трёхуровневая система выходов                                    |
//+------------------------------------------------------------------+
void ThreeLevelSystemOfOutput()                      {
   int sp=MarketInfo(OrderSymbol(), MODE_SPREAD);
  if ( бла-бла-бла)                                  {
    SimpleTrailingPositions();
                                                      }
                                                      }
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void SimpleTrailingPositions() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
... ... ...
   
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
... ... ...
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLossInPoint(int pp) {
    double ldSL=0, mp=MarketInfo(OrderSymbol(), MODE_POINT);  
 ... ... ...  
//+------------------------------------------------------------------+
//| Возвращает профит позиции в пунктах                              |
//+------------------------------------------------------------------+
int ProfitPosition() {
  double pBid, pAsk, pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double pr=0;
 
  if (OrderType()==OP_BUY) {
    pBid=MarketInfo(OrderSymbol(), MODE_BID);
    pr=(pBid-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
    pr=(OrderOpenPrice()-pAsk)/pp;
  }
  return(MathRound(pr));
}
 
//+------------------------------------------------------------------+
//| Возвращает StopLoss позиции в пунктах                            |
//+------------------------------------------------------------------+
int StopLossInPoint() {
  double pp=MarketInfo(OrderSymbol(), MODE_POINT);
  double sp=0;
 
  if (OrderType()==OP_BUY) {
    sp=(OrderStopLoss()-OrderOpenPrice())/pp;
  }
  if (OrderType()==OP_SELL) {
    sp=(OrderOpenPrice()-OrderStopLoss())/pp;
  }
  if (OrderStopLoss()==0) sp=-OrderOpenPrice()/pp;
  return(MathRound(sp));
}
//+------------------------------------------------------------------+

いろいろなものが入っていて、少しぼやけているのがわかると思います。

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);

しかも、ほとんどすべての操作でです

でも、シンボル(ペアを指定した)とマジシャンを変えたのは一番最初だけなんですよ!?Expert Advisor を 1 分のタイムフレームでオンラインを開始しました。私はこのペアで利益を待って値動きを止めました。すべてうまくいっているようです。私はこのライブラリのアルゴリズムに準拠しています。

でも、他の2組はまだ利益が出ていません(自分のトロールで)。

明日、ネットで見ます。

 
rid:

これがキムの3段出力ライブラリです。今、私はコードの中に入ってみました。どこでもシンボルの代わりにペアの名前を設定し、マジックの代わりに自分のペアのマジックを設定しました。

...

いろいろなものが入っていて、少しぼやけているのがわかると思います。

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
ライブラリは有能に書かれている - チャートツールとの連携はない。
そのため、そのまま使用することができます。
 

komposterさん、今回もご回答ありがとうございました。

今、私はエキスパート・アドバイザーの3つのペアで利益を得るためにオンラインで待っていました。それぞれのペアは、トロールモードに合わせて動いているようですライブラリーコールとのペアも収録!

 
komposter:
ライドを 行います。

これがキムの3段出力ライブラリです。今、私はコードの中に入ってみました。どこでもシンボルの代わりにペアの名前を設定し、マジックの代わりに自分のペアのマジックを設定しました。

...

いろいろなものが入っていて、少しぼやけているのがわかると思います。

MarketInfo(OrderSymbol(), MODE_POINT);
MarketInfo(OrderSymbol(), MODE_BID);
MarketInfo(OrderSymbol(), MODE_ASK);
ライブラリは有能に書かれている - チャートツールとの連携はない。
そのため、そのまま使用することができます。

自分なりに工夫して...。カットコード


extern int    MagicNum = 400400, Stop = 33;
extern double Lot1 = 0.3;
int LotStop [8] = {28,33,43,33,33,33,33,33}; //можно юзать просто Stop
 
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{ 
 int i, SymPermitted = 3;
 string Symbols[8] = {"EURUSD","GBPUSD","USDJPY","EURJPY","USDCHF","Reserved","Reserved","Reserved"};
 
  // Ma defence
  if (Bars<100)
    return(0);  
  
  for (i=0; i < SymPermitted; i++)
  {
    // Compile/reload/crash config defence
    if      (Symbols[i] == "EURUSD") { Stop = 28; Lot1 = 0.6; }
    else if (Symbols[i] == "GBPUSD") { Stop = 33; Lot1 = 0.2; }
    else if (Symbols[i] == "USDJPY") { Stop = 43; Lot1 = 0.6; }
    Sleep (1000); // Просто так
    Checking (Symbols[i], i);
  }
  return (0);
}
 
void Checking (string Sym, int LotStopIndex)
{
 int Total, LotStop = LotStop[LotStopIndex], i, j, Tic = 0;
 double VPoint, VAsk, VBid;
 
   Total = OrdersTotal();
 
   // Check opened
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true)
     {  
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
         return (0);
     }
   }
   
   VPoint = MarketInfo(Sym, MODE_POINT);
   //... кучка кода расчётов
   Total = HistoryTotal();
   
   if (Total == 0)
   { // Reset to default
     LotSize = Lot1;
     LotStop[LotStopIndex] = Stop;
   }
   
   for (i=0; i<Total; i++)
   {
     if (OrderSelect (Total-i-1, SELECT_BY_POS, MODE_HISTORY) == true)
     { 
       if (OrderSymbol() == Sym && OrderMagicNumber() == MagicNum)
       { // Was loss (Alpari иногда выбивает положительные лосы и отрицательные профиты... мистика
         if (((OrderProfit ()) < 0) || (OrderClosePrice() == OrderStopLoss()))
         { ..код
         }
           
         else
         { // Reset to default
           LotSize = Lot1;
           LotStop[LotStopIndex] = Stop;
         }
         break;
       }
     }
 
     else
     {
       Print("Ошибка <", GetLastError(), "> при выборе хистори - ордера");
       return (1);
     }
  }
 
  if(AccountFreeMarginCheck(Sym, OP_BUY, LotSize) <= 0) 
  {  return (0); }
 
  
  VAsk = MarketInfo (Sym, MODE_ASK);
  VBid = MarketInfo (Sym, MODE_BID);
  // bay|sell...
  
  if (условие 1)
    Tic = OrderSend (Sym, OP_BUY, LotSize, VAsk, 3, VAsk-LotStop[LotStopIndex]*VPoint, VAsk+LotStop*VPoint, "CMATest5m", MagicNum, 0, Lime);
    
  else if (условие 2)
    Tic = OrderSend (Sym, OP_SELL, LotSize, VBid, 3, VBid+LotStop[LotStopIndex]*VPoint, VBid-LotStop*VPoint, "CMATest5m", MagicNum, 0, Red);
  
  if (Tic <= 0)
  {
    Print("Ошибка <", GetLastError(), "> при запросе ордера");
    Sleep (60000); // Ждём минуту... рынок никуда не убежит :-)...
  }
}
 

VassaVさん、ここに掲載されている内容や使い方をもう少し詳しく教えてください。

カットコード」という表現はどういう意味ですか?

なぜ、3行目にコメントがないのか。//使えるかどうか?

 
rid:

VassaVさん、ここに掲載されている内容や使い方をもう少し詳しく教えてください。

カットコード」という表現はどういう意味ですか?

なぜ、3行目にコメントがないのか。//使えるかどうか?


Cut upとは、根元だけが残るように切り落とすという意味です。 使い方はあなた次第ですが、ここではほんの一例を紹介します。

対応する。

//...計算コードの束 - ここでは独自の信号/インジケータ処理コードです。

// ...コード - ここでは、損失処理用の独自のコードを用意しています。

条件1 - ここでは、独自の売買条件コードを設定しています。

// can you use...?- はコメントであり、このように表示されるだけです。

つまり、各通貨のパラメータを格納するために配列を使用するか、またはパラメータをコード

(セクション // コンパイル/リロード/クラッシュの設定)