[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 388

 

EAを1つのフォルダに収納するのではなく、フォルダにまとめることは可能なのでしょうか...❔?

そして、このフォルダーからも仕事をすること。

あるEAを20バージョン、別のEAを20バージョン持っているのですが、ファイル一式を解除するのは不可能です。

 

こんにちは。

検索しても出てこない。

もしかしたら、同じような脚本を見た人がいるかもしれない。

ポイント:スクリプトで指定するのは、シンボル、買い/売り、ボリューム

は5-7個あるはずです。

複数のシンボルで同時にオープンする場合、そのボリュームは0に等しくない。

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

敬具

 
こんにちは。質問があるのですが...。ストキャスティクスによるエントリー(5,14,3)同じくストキャスティクスによるエグジットだが、別の期間(5,3,3)を持つ。ストキャスティクスを出口に使って、リターンのシグナルは使わないというのはどうなんでしょう。
問題があって、どうすれば解決できるのか見当もつかないので、説明します。
つまり、私が投稿したコードでは、2つの関数があります。
//+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----
if (size==0) return;

int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue;
}

closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----
int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;

int ticket,type;
double lots;
bool res;

int total=OrdersTotal();

for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return;
}
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) に、注文を残すか閉じるかを決定する条件を入れなければならない。
条件をつけてみたが、何も効果がない...。
どなたか、これらの関数にエラーがあるのか、あるいは私が失敗したのか、ご確認ください。
ファイル:
 
Snegovik:

こんにちは。

検索しても出てこない。

もしかしたら、同じような脚本を見た人がいるかもしれない。

ポイント:スクリプトで指定するのは、シンボル、買い/売り、ボリューム

は、5-7個のフィールドがあるはずです。

複数のシンボルで同時にオープンする場合、そのボリュームは0に等しくない。

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

敬具


とんでもない言葉遣いですね。質問者が求めているものは...
 
belous:
こんにちは。質問があるのですが...。ストキャスティクスによるエントリー(5,14,3)同じくストキャスティクスによるエグジットだが、別の期間(5,3,3)を持つ。ストキャスティクスを出口に使って、リターンのシグナルは使わないというのはどうなんでしょう。
問題があって、どうすれば解決できるのか見当もつかないので、説明します。
私が書いたコードでは、2つの関数があります。
void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) に、注文を残すか閉じるかを決定する条件を入れる必要があります...。
条件をつけてみたが、何も効果がない...。
どなたか、これらの関数に間違いがないか、あるいは私が失敗していないか、見てください。


もしかしたら、参考になるかもしれません。あなたのコードを見たわけではありません。
キムの機能

  //========================================================================================================================
  // Закрытие открытых позиций на продажу 
  //-------------------------------------------------------------------------------------------------------------------------
  if(ExistPositions(NULL, OP_SELL, Magic, 0) == true) //если открыта позиция sell
  {
    if() // условие на закритие 
    {
      ClosePosFirstProfit(NULL, OP_SELL, Magic); //закрываем позицию
    }
  } 


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 19.02.2008                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double ll, pa, pb, pp;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), err, it;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) //break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=clCloseBuy;
      } else {
        pp=pa; clClose=clCloseSell;
      }
      ll=OrderLots();
      pp=NormalizeDouble(pp, dg);
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        if (UseSound) PlaySound(SoundSuccess); //break;
      } else {
        err=GetLastError();
        if (UseSound) PlaySound(SoundError);
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
              ErrorDescription(err),", try ",it);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();

  // Сначала закрываем прибыльные позиции
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderProfit()+OrderCommission()+OrderSwap()>0) ClosePosBySelect();
          }
        }
      }
    }
  }
  // Потом все остальные
  k=OrdersTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}
 
 
belous:
こんにちは。質問があるのですが...。ストキャスでエントリーして(5,14,3)、ストキャスのみで別の期間(5,3,3)でエグジットしています。ストキャスティクスを出口に使って、リターンのシグナルは使わないというのは理解できません。 。

私なら、クローズするチケットの配列を 作らず、成行注文の 列挙ループで、可能な条件をチェックしながら、チケットをクローズ関数の入力に送り、各注文のチェックを します。

 
入札はどの時点でも0にできるのか?
 
YOUNGA:
入札はどの時点でも0にできるのか?
チェックが大変なのか、手抜きなのか。という問いかけがしやすくなります。入札価格はゼロでよいのですか?何も売られていなければ可能です8-(
 
drknn:

文言がとても良い。質問者が求めているものは...


あるシンボルの売りを2回目の買いで同時にオープンするスクリプトがあります。

私は、現在の価格で、各シンボルに指定されたボリュームで、7-10シンボルの売り/買いを同時に開くことができるスクリプトに興味を持っています。

売り EURUSD 1

GBPUSD 1.5を買う

売り USDCAD 1.2

AUDUSD 1.1買い

NZDUSDの買い 2

USDCHFの買い 3

MultiOrders スクリプトはほぼ完璧ですが、シンボルのフィールドが5つあるのが残念です。

 
Snegovik:


あるシンボルの売りを2回目の買いで同時にオープンするスクリプトがあります。

私は、現在の価格で、各シンボルに指定されたボリュームで、7-10シンボルの売り/買いを同時に開くことができるスクリプトに興味を持っています。

売り EURUSD 1

GBPUSD 1.5を買う

売り USDCAD 1.2

AUDUSD 1.1買い

NZDUSDの買い 2

USDCHFの買い 3

MultiOrders スクリプトはほぼ完璧ですが、シンボルのフィールドが5つあるのが残念です。

同じく。このスクリプトを把握すれば、あなたの、スクリプトの中で、さらに良いものが出てくるでしょうし、さらに機能を追加することもできます。