[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 548

 
harvest:
皆さん、オープンポジションをブレイクイーブンに移動させる関数の例を教えてください(ティックでの作業)、私のExpert Advisorにはトロールがあり、このトロールの開始は買いへのロールオーバーの機能の後にのみです。よ ろしくお願い します。


トレーラー - Yury Dzyubanによるトロールのライブラリ - 特に、それは唯一の利益からのトロールがアクティブになっている場合、すなわち、変数trlinloss = falseの値は、トロールが損失領域で実行されているかどうかの質問を解決する方法を参照してください。この例に従ってtrawl関数を編集すれば、それで完了です。

ファイル:
 

友よ、なぜクラシック・マーチンがうまくいかないのか、教えてくれませんか?購入する案件が開くだけ!!!1ヶ月前からいじり倒した結果、感動ゼロ!Strategy Testerでは正常に動作するが、デモでは動作しない。もう一つ面白いのは、T/SとT/Pを1000にすると買い時のみ開き、200にすると買いでも売りでも開くことです...。男、何が違うんだ?

コードはこちら: Help plz

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

そうすると、さらに不明確になってきます。私は1 000 000(1k)ドルでユーロを買ったとしましょう(ブローカーは、取引が100kのために行くように100でこれを乗算)チャートは100ポイントを跳ね上げ、すぐにそれらを販売し、私は10 000ドルのためにプラス側にあるよくそこに私のポケットに結果6000ドルネットとしてブローカーの手数料とスプレッド。(まあ、売った後、また100ポイント下がるのは明らかだが)こんなのナンセンスだ!!!!やっぱり底辺に落ちるかも?そうでなければ、非常に大きなプレーヤーが何もせずに何十億も稼いでしまうでしょう。


では、どうでしょう...。

一般に、顕著な値動きをするためには、非常に大きな金額で売買する必要がある、ということだろう。このような金額では、私のようにレバレッジは1/200ではなく、比喩的に1/2です。まあ、これは純粋に私の個人的なことなんですけどね。こんなくだらないことも書けるんだ...。

 
ひとつだけ、驚いたことがあります。以前、ここにコードを投稿しましたが、間違いがあり、それを修正するのを助けてくれました。最初のループでオーダーセレクタがオーダーを選択し、エラーは発生しなかったのに、その下の別の行で同じオーダーを選択すると、オーダーセレクタがエラーを表示したのでしょうか。もし可能なら見てみてください、ちょっと気になるんです。
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

まさか!?なぜダメなのか?オーバーシュート時に未決済の注文がなかった!?理解できないかもしれない。

検索サイクルも履歴に残る!そこで、int ticket変数に代入しているのです

そしてそれは悪態をつく、失礼、2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30:アラート: SELL セレクトエラー HISTORYticket 4105

MODE_HISTORYからMODE_TRADESになるとき?

そして何より、ヒストリー上で同じオーダーをオーダーセレクトの助けを借りて選択すると、最初に選択されるのです!そうでなければ、作業できません。論理がない!!!ショックです。


 
そのようなEAやスクリプトはどこにあるのか教えてください...。注文は早朝に出され、原則として相場は大きく変動している。
 

お困りですか?

私のEA(イベントカウンター)には、以下のブロックがあります。

if (isCloseLastPosByStop()==True) //最後の注文がStopで決済された場合

{
N=N+1です。
Alert(N, " moose");
} else N=0;

質問:画面に表示するのではなく、ファイル(Excel)にデータを書き込む方法を教えてください。

 

こんにちは。

矢印が描画されない理由、コードをアドバイスしてください。

ObjectCreate("miniDown",OBJ_ARROW, 0, Time[1], Open[1])を実行します。
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Yellow);

 

EURUSD=1.44757、GBPUSD=1.63366とした場合、互いに近接させたいと考えます。

説明しよう。

a=GBPUSD/EURUSD=1.12855336874901約1.12855 です。

すなわち、ある通貨を売買して、その価値がほぼ等しくなるように取引したい場合、次のようになります。

私は EURUSD*aを購入/販売する必要が ありますが、そのようなロットはありませんので、私の質問は、それを実装する方法であるロット計算?

私はそんなには持っていないので、質問なのですが、どうすればいいのでしょうか?

 
T-G:
オープンポジションを考慮した、つまり自己資本を使った最大許容ロットの計算機能を共有したい。標準機能ではリスクは計算されるが、トレードがある場合、それを開くための資金が不足している

以前、カスタムEA用に書いたものです。

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

ロットを修正するには、パラメータltにポジションを建てたい ロットを、パラメータPartの代わりに取引に使用するフリーファンドを分割する数を挿入して、関数を呼び出す必要があります。例えば、フリー資金の半分だけを取引する場合、Partの値は2でなければならず、3分の1なら3、4分の1なら4、といった具合です。

double Lot=CorrectLots(0.1, 2);

関数を呼び出した後、OrderSend()関数のパラメータとしてLotを挿入してください。

ハードマーチンでEAのロットを制限し、負けロットを防止する機能です。しかし、収益性も低下していた...。

 
への返信、何が悪いのか理解できない =(