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

 
evillive:

108という数をとると、最大で151の151乗になる - 108^151=1.11426138071861e+307

108^152=1.20340229117609e+309 は 108^4096 はともかく、MCL プログラミングには多すぎる。

どのような計算をすると、このようなスケールが必要になるのでしょうか?


値動き解析とnlpのアテンション・マネジメント、そして自動操縦の脳を合成しようとしているんだ :)
 
alex12:
値動き解析とnlp-アテンション・マネジメントを合成しようとしているのですが、脳が自動操縦になっているんです :)
悟りを開くには、飛ばし過ぎないよう、適切な物質を選ぶことが大切です
 

MQL4の勉強を始めたのですが、注文がどのように選択されるのかが理解できません。

をチュートリアルよりご覧ください。

for(int i=1; i<=OrdersTotal(); i++) // オーダーループ

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // if

{

if (OrderSymbol()!= Symb) continue;

私の理解では、i<=注文数 である限り、i=1 である。

i-1の位置で選択されたオーダー(つまりオーダー#0)が存在する場合

シンボルと比較

次にiに1(i++)を加え、新たな反復を開始する

I don't understand the comment// If there is next order (what do you mean: next in position or this order that being currently selected?).

ロシア語で説明してください。

 
オーダーがある場合、つまりand-1という番号の下に存在する場合は、次の条件に進みます。
 
Vladon:
オーダーがある場合、つまりand-1という番号の下に存在する場合は、次の条件に進みます。

常に番号0(i-1)のオーダーを見つけることができる。次の」注文を決めるのに、なんという狂った方法だろう、本当に誤解を招く...。
 
解説をありがとうございました。
 
evillive:

常にゼロの番号(i-1である)を持つオーダーを見つけることができる。これは、「次」の順番を決めるという、なんとも乱暴な方法で、まさに誤解を招きかねない...。


注文がなければ、このデザインで。

for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий

{ 

if (OrderSymbol()!= Symb) continue;

を選択すると、次の条件には進みません。

というのは、順序と-1(ここでは=0)が存在しないからです。

もちろん、このように書くと不便だし、なぜこうでなければならないのか、その理由も不明である。

とはならず、例えばこのように。

for(int i=0; i<OrdersTotal(); i++) // Цикл перебора ордер

{

if (OrderSelect(i,SELECT_BY_POS)==true) // Если есть следующий

{ 

if (OrderSymbol()!= Symb) continue;
 

こんにちは氏プログラマは、私は質問を持って、私は口座残高の 割合を閉じるには、コードの一部を学ぶことができません。それは、パーセンテージではなく、一度にすべての、市場にあるすべての注文を閉じます。 私はそれが特定の順序と預金残高の計算割合を閉じる必要があります。


extern double Percent = 2.0;
extern int Slippage = 2;
double stop;

void OnStart()
{

if (Digits == 3 || Digits == 5)
{
Slippage *= 10;
} }.

for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent;
if(stop<=AccountBalance())であれば、stopは100%になります。
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())項)
}////(ostop==AccountBalance()/100*Percent)
}///// (OrderSymbol() == Symbol() )
}// (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}/// for(int i = OrdersTotal()-1; i>=0; i--)
return;
}///void OnStart()
//+-----------------------------------------------------------------.

 
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);

どうしたんですか

とこれです。

if(stop==AccountBalance()/100*Percent)
stop=AccountBalance()/100*Percent;

が満たされることはない。

ということです。

if(stop<=AccountBalance())

は、どのような注文にも必ず対応します。

結論:すべてが間違っている。

あなたの機能はよく考える必要があります、私はすぐに答えを持っていません。

でも、少なくとも最初はこんな感じなんですよ。

extern double Percent = 2.0;
extern int Slippage = 2;
double stop;

void OnStart()
{

if (Digits == 3 || Digits == 5)
{
Slippage *= 10;
}

for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol()) 
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(OrderProfit()>=AccountBalance()/100*Percent)

{
if(OrderType() == OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
if(OrderType() == OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())
}//if(ostop==AccountBalance()/100*Percent)
}//if (OrderSymbol() == Symbol() )
}//if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//for(int i = OrdersTotal()-1; i>=0; i--)
return;
}//void OnStart()
//+-----------------------------------------------------------------
 
Vladon:


このような構成で注文がない場合。

を選択すると、次の条件には進みません。

というのは、順序と-1(ここでは=0)が存在しないからです。

もちろん、このように書くと不便だし、なぜこうでなければならないのか、その理由も不明である。

とはならず、例えばこんな感じです。


私も読んでいて、なぜi=0としないのかと思いましたが、その方がシンプルでわかりやすいようです。

このスクリプトのコード全体は以下の通りです。もしかしたら、作者がi=0ではなくi=1としたのには、それなりの理由があるかもしれません。

// closeorder.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   string Symb=Symbol();                        // Финанс. инструмент
   double Dist=1000000.0;                       // Предустановка
   int Real_Order=-1;                           // Пока рыночных нет
   double Win_Price=WindowPriceOnDropped();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         int Tip=OrderType();                   // Тип ордера
         if (Tip>1) continue;                   // Отложенный ордер  
         //------------------------------------------------------ 4 --
         double Price=OrderOpenPrice();         // Цена ордера
         if (NormalizeDouble(MathAbs(Price-Win_Price),Digits)< //Выбор
            NormalizeDouble(Dist,Digits))       // самого близкого орд       
           {
            Dist=MathAbs(Price-Win_Price);      // Новое значение
            Real_Order=Tip;                     // Есть рыночный ордер
            int Ticket=OrderTicket();           // Номер ордера
            double Lot=OrderLots();             // Количество лотов
           }
         //------------------------------------------------------ 5 --
        }                                       //Конец анализа ордера
     }                                          //Конец перебора орд.
//--------------------------------------------------------------- 6 --
   while(true)                                  // Цикл закрытия орд.
     {
      if (Real_Order==-1)                       // Если рыночных нет
        {
         Alert("По ",Symb," рыночных ордеров нет");
         break;                                 // Выход из цикла закр        
        }
      //--------------------------------------------------------- 7 --
      switch(Real_Order)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: Price_Cls=Ask;                 // Ордер Sell
            Text="Sell ";                       // Текст для Sell
        }
      Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
      bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера
      //--------------------------------------------------------- 8 --
      if (Ans==true)                            // Получилось :)
        {
         Alert ("Закрыт ордер ",Text," ",Ticket);
         break;                                 // Выход из цикла закр
        }
      //--------------------------------------------------------- 9 --
      int Error=GetLastError();                 // Не получилось :(
      switch(Error)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }
//-------------------------------------------------------------- 10 --
   Alert ("Скрипт закончил работу -----------------------------");
   return;                                      // Выход из start()
  }