エラー、バグ、質問 - ページ 770

 
maryan.dirtyn:
...

p.s. 私に標準ライブラリを 使えと言う人は、気にしないでください。

少なくとも標準ライブラリは閲覧/学習が可能であり、どのような間違いがあったのかを理解することができます。とても良い機会です。
 

この6時間、これをやろうとしたが、無理だと思うようになった

標準的なものは一切使いませんので、失礼ですが......。

 
maryan.dirtyn:

この6時間、これをやろうとしたが、無理だと思うようになった

標準的なものは使いませんので、失礼ですが......。

標準ライブラリの 何がそんなに怖いんだ?Trade.mqhという ファイルに何が書かれているか見てみましょう。

ポジションをオープンする機能。

//+------------------------------------------------------------------+
//| Open position.                                                   |
//+------------------------------------------------------------------+
bool CTrade::PositionOpen(const string symbol,const ENUM_ORDER_TYPE order_type,const double volume,
                          const double price,const double sl,const double tp,const string comment)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- checking
   if(order_type!=ORDER_TYPE_BUY && order_type!=ORDER_TYPE_SELL)
     {
      m_result.retcode=TRADE_RETCODE_INVALID;
      m_result.comment="Invalid order type";
      return(false);
     }
//--- setting request
   m_request.action      =TRADE_ACTION_DEAL;
   m_request.symbol      =symbol;
   m_request.magic       =m_magic;
   m_request.volume      =volume;
   m_request.type        =order_type;
   m_request.price       =price;
   m_request.sl          =sl;
   m_request.tp          =tp;
   m_request.deviation   =m_deviation;
   m_request.type_filling=m_type_filling;
   m_request.comment     =comment;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

自分がやろうとしていることと、それほど大差がないことに納得してください。関数ClearStructures()に注目してください。ポジションを開いた後にストップを設定する必要がある場合は、次の機能を使用します。

//+------------------------------------------------------------------+
//| Modify specified opened position.                                |
//+------------------------------------------------------------------+
bool CTrade::PositionModify(const string symbol,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__)) return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action=TRADE_ACTION_SLTP;
   m_request.symbol=symbol;
   m_request.sl    =sl;
   m_request.tp    =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

//---

シンプルで、すべてがうまくいく。そして、適当に追加/変更/実験してください。

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
maryan.dirtyn:

この6時間、これをやろうとしたが、無理だと思うようになった

標準的なものは一切使いませんので、失礼ですが......。

特にあなたには。

#include <trade\trade.mqh>
void OnStart()
  {
   CTrade trade;
   trade.Buy(1.0,"EURUSD",SymbolInfoDouble("EURUSD",SYMBOL_ASK),1.20000,1.50000,"Yeah, baby!");
  }

未知のものに触れるには、このコードをスクリプトに挿入してコンパイルし、カーソルを「Buy」に置いてAlt + Gを押すだけです。

すべてのライブラリの内部を旅するようになる。同時にエラー処理にも 目を向けてください。

 
Renat:

特にあなたには。

未知のものに触れるには、このコードをスクリプトに挿入してコンパイルし、カーソルをBuyの上に置いてAlt+Gを押すだけです。

あなたはすべての図書館の内部を旅し始めるでしょう。同時にエラー処理にも目を向けてください。


"Yeah, baby!"
上記のような声も出せますし、すべてがうまくいくでしょう。)))
 

他に方法はないのですね?

#include <trade\trade.mqh>
 
maryan.dirtyn:

他に方法はないのですね?

メインファイルに似たような関数を作れば、何も差し込む必要はない。
 

そういうことです))...。6時間目...どこが エラーなのかがわからない

標準ライブラリを 使いたくないのは、フラグやグローバル変数が関数内で使われているためで、trade.mqhなどを分解するのは合理的とは思えません。

void OnTick(){ if(PositionsTotal()<1){OPEN();}}

bool OPEN(){
             MqlTradeRequest request; ZeroMemory(request);
             MqlTradeResult  result;  ZeroMemory(result);
             

             request.symbol       = _Symbol;
             request.action       = TRADE_ACTION_DEAL;
             request.type_filling = ORDER_FILLING_FOK;
             request.deviation    = 100;
             request.volume       = NormalizeDouble(2,2);
             request.type         = ORDER_TYPE_BUY;
             request.price        = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
             request.tp           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) + 500*_Point,_Digits);
             request.sl           = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) - 500*_Point,_Digits);

             OrderSend(request,result);     
                        
             if(result.retcode==10009 || result.retcode==10008)  Print("Succsesful open");
             else                                               Print("Error open: ",DoubleToString(GetLastError(),0),"  response code: ",result.retcode);
    
   return(true);}
 
maryan.dirtyn:

そういうことです))...。6時間目...どこが エラーなのかがわからない

フラグやグローバル変数が関数内で使われるため、標準ライブラリは 使いたくないし、trade.mqhや他の関数をパーツごとに分解するのも合理的とは思えません

どのサーバーで、どのシンボルを試しているのでしょうか?

MetaQuotes-Demoであなたのコードを実行したところ、トランザクションは成功しました。

2012.07.11 15:08:36     Trades  '1026582': deal #109507221 buy 2.00 EURUSD at 1.22625 done (based on order #115678901)
2012.07.11 15:08:36     Trades  '1026582': order #115678901 buy 2.00 / 2.00 EURUSD at 1.22625 done
2012.07.11 15:08:36     Trades  '1026582': instant buy 2.00 EURUSD at 1.22627 sl: 1.22127 tp: 1.23127 (deviation: 100)
 

MetaQuotes-デモ

ログイン:1219233

EURUSD

ポンドで試したところ、同じように停止しませんでした。

ビルド655(参考になれば)