初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 73

 

位置の修正は どこに書いてあるのですか?

ストップロスとテイクプロフィットの詳細は、売買条件の前に書かれています。

   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);            // лучшее предложение на покупку
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);            // лучшее предложение на продажу
   double SL  = NormalizeDouble(StopLoss,_Digits);
   double TP  = NormalizeDouble(TakeProfit,_Digits);
                        
   bool Buy_Condition_1=...;
   bool Buy_Condition_2=...;
   bool Buy_Condition_3=...;
а сам
 bool PositionModify(const string _Symbol,const double SL,const double TP)
   {
      if(PositionSelect(_Symbol)==true) // есть открытая позиция
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
         {
    Alert("SL!!!");
    return;    // закрыл 
         }
   MqlTradeRequest request={0};
   MqlTradeResult  result ={0};
        
       
   mrequest.action=TRADE_ACTION_SLTP;
   mrequest.symbol=_Symbol;
   mrequest.magic =EA_Magic; 
   mrequest.sl    =StopLoss;
   mrequest.tp    =TakeProfit;
   OrderSend(mrequest,mresult);
   if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Стопка прошла#:",mresult.order,"!!");
           }
         else
           {
            Alert("Стопка не прошла - код ошибки:",GetLastError());
            return(false);
           }
   return(true);
  }
//----------------------------------------------------------------- 
if(Buy_Close_1 || Buy_Close_2)
  
после отсылки ордера на покупку. Пока при компиляции борюсь с "лишними" скобками фигурными. Вопрос дубль 2 - правильно ли я расположил модификацию позиции? И вообще, "классический" ли он имеет код (при условии, что он верный)?
 
papaklass:

コードにエラーがあります。

ありがとうございます。もうないんです。

ポジショニングについてはいかがでしょうか。

つまり、中括弧をつけると、コンパイル時に - 'PositionModify' -関数は グローバルスコープでのみ宣言できる、と生成されます。

今回、私はそれを信じています。つまり、「position modifier」自体は 、int OnInit()の前に置き 、条件(if)は、購入部の後に置くべきでしょうか

 
papaklass:

コードを教えてください、意味がわかりません。

追記:PositionModify()関数は、グローバルレベル、つまり関数が あるレベルで記述する必要があります。OnInit()、OnTick()、OnDeinit()。

以下はそのコードです。同じように売りのストップがあるように、買いのストップがあるだけです。
ファイル:
Aim.mq5  13 kb
 
papaklass:

修正しました。エラーなくコンパイルされます。テスターでテストしていない。あなたのコードは読めませんでした。私の修正版のようなコードレイアウトに慣れて ください。

ありがとうございます(レイアウト以外に何が変わったのかよく分かりませんが)。

2行目の "SMB "は何を意味し、どこで値が定義されているのか、_Symbolとは書けないのか?

  mrequest.action   = TRADE_ACTION_SLTP;
      mrequest.symbol   = smb;
      mrequest.magic    = EA_Magic; 
      mrequest.sl       = SL;
      mrequest.tp       = TP;
 

こんにちは、端末のコンピュータの電源を切っている場合、シグナルの注文は実行されるかどうか教えてください。

 

こんにちは。

エキスパートが起動し、初期化されると、テキストボックスとボタンが描画されます。 エキスパートはティックを処理します。を入力した場合 テキストボックスに何らかの値を入力してボタンを押すと、ティックハンドラーに新しいデータが表示されます。

つまり、WindowsのGUI要素を介してExpert Advisorとユーザーデータをインタラクティブにやり取りするための正しい(よりシンプルで優れた)方法とは何でしょうか?CChartObjectEditとCChartObjectButtonは、失礼ながら、ある種の「ポルノ」です。


ありがとうございます。質問が単純で、答えがどこにあるのか突いてみてください!だったらごめんなさい。

 
papaklass:

かっこいい。

1.コードがコンパイルされるようになった。 最初の変化

コンパイルと操作性は別物なのが残念)

input int StopLoss=60;      // Stop Loss
input int TakeProfit=200;   // Take Profit
//--- глобальные переменные
double MFI[];// массив MFI
double DEMA[];// массив DEMA

 bool PositionModify(const string smb,const double SL,const double TP)
  {       
      MqlTradeRequest mrequest={0};
      MqlTradeResult  mresult ={0};
      
      mrequest.action   = TRADE_ACTION_SLTP;
      mrequest.symbol   = smb;
      mrequest.sl       = SL;
      mrequest.tp       = TP;
      
      OrderSend( mrequest, mresult );
      if( mresult.retcode == 10009 || mresult.retcode == 10008 )//запрос выполнен или ордер успешно помещен
      {          
         Alert( "Стопка прошла#:", mresult.order, "!!" );
      }
      else
      {
         Alert( "Стопка не прошла - код ошибки:", GetLastError() );
         return( false );
      }   
   return( true );
  }
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
  {
MFIHandle=iMFI(NULL,0,MFIPeriod,VolumeType);
DEMAHandle=iDEMA(NULL,0,PeriodDEMA,ShiftDEMA,MFIHandle);
if(BolBandsHandle<0 || MFIHandle<0 || DEMAHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 //+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
 ...
   double Ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);            // лучшее предложение на покупку
   double Bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);            // лучшее предложение на продажу
   double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),4);
   double TP   = NormalizeDouble(PositionGetDouble(POSITION_TP),4);
                        
   bool Buy_Condition_1
   
   bool Buy_Close_1=
   bool Sell_Condition_1=
   
   bool Sell_Close_1=
   
 if(Buy_Condition_1 || Buy_Condition_2)
     { 
       if(Buy_Condition_3 && Buy_Condition_4)
        {
         // есть ли в данный момент открытая позиция на покупку?
         if(Buy_opened)
           {
            Alert("Позиция на покупку имеется");
            return;    // не добавлять к открытой позиции на покупку
           }        
         mrequest.action = TRADE_ACTION_DEAL;    // немедленное исполнение
         mrequest.symbol = _Symbol;              // символ
         mrequest.magic = EA_Magic;              // Magic Number
         mrequest.volume = Lot;                  // количество лотов для торговли
         mrequest.type = ORDER_TYPE_BUY;         // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_FOK;   // тип исполнения ордера - все или ничего

         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         
         
         
 //------------------------------------------------------------------------------
         PositionModify(Symbol(),NormalizeDouble(Bid - SL*_Point,4),TP*_Point);
 //-------------------------------------------------------------------------------
 
 
 
 
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Buy успешно помещен, тикет ордера #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      } 

if(Buy_Close_1 || Buy_Close_2)
     {
      if(Buy_Close_3)
        {
        // есть ли в данный момент открытая позиция на покупку?
          if(PositionSelect(_Symbol)==true) // есть открытая позиция
           {
            if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
                {
           Alert("Закрываю ордер BUY!!!");                  
                                  
         mrequest.action = TRADE_ACTION_DEAL; // немедленное исполнение
         mrequest.symbol = _Symbol;           // символ
         mrequest.magic = EA_Magic;           // Magic Number
         mrequest.volume = Lot;               // количество лотов для торговли
         mrequest.type = ORDER_TYPE_SELL; // ордер на продажу      
         mrequest.type_filling = ORDER_FILLING_FOK; // тип исполнения ордера - все или ничего
         //--- отсылаем ордер
         OrderSend(mrequest,mresult);
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("тикет закрытия Buy #:",mresult.order,"!!");
           }
         else
           {
            Alert("Запрос на установку ордера закрытия Buy не выполнен - код ошибки:",GetLastError());
            return;
           }
        }
      }
    }
  }
 ...
     return; 
}//+------------------------------------------------------------------+end PositionModify
 

なぜテスターではストップロスやプロフィットを設定するのに、チャート上では設定しないのですか?

だんだん怖くなってきた)))

 
Lester:

なぜテスターではストップロスやプロフィットを設定するのに、チャート上では設定しないのですか?

途中からパニックになり始めた ))))。

Lester:Zdesはテンプレートを置いて、その中に修正を加えて、polzuvatsyaの方法を示しました。

https://www.mql5.com/ru/forum/6343/page73

やりたくないなら、変数を正しく読み取るしかないでしょう。

Стоплос и тейкпрофит в пункти.*Понт = 0.002-ето тейк,ну надо и к добавит.

PositionModify(Symbol(),NormalizeDouble(Bid - SL*_Point,4),TP*_Point);

PositionModify(Symbol(),NormalizeDouble((Bid - SL*_Point),4),NormalizeDouble((Bid + TP*_Point),4));

 
Chino:

こんにちは、端末のコンピュータの電源を切っている場合、シグナルの注文は実行されるかどうか教えてください。

そんな可能性を開発者は約束してくれました。まだです。
理由: