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

 
OSを再インストールする。OS再インストール後のMT4を再インストール前の状態に復元する方法。
指標、EA、スクリプト、テンプレート、プロファイル、アカウント
 
AlexandrL:
OSを再インストールする。OS再インストール後のMT4を再インストール前の状態に復元する方法。
インジケーター、Expert Advisor、スクリプト、テンプレート、プロファイル、アカウント
再インストールする前に、端末のフォルダをフラッシュドライブにコピーしてください。バージョンが7以上であれば、共有フォルダも。詳細はこちらを ご覧ください。
 

午後

アローインジケーターに基づくアドバイザー。

上のフラクタルで 売り、下のフラクタルで 買う。仕事中MAX。1オーダーです。しかし、Expert Advisorはフラクタルが考慮されておらず、買いのみで開くため、どこかでエラーが発生しています。または、(iCustomでオフセットを変更すると)全く開かなくなります。Expert Advisorに別の条件(矢印のクロスオーバー時)を挿入してみたのですが、どうでしょうか?すべて動作しますが、矢印インジケータからデータを取得しません。

インジケータを使用します。

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 Aqua
#property  indicator_color2 Yellow
#property  indicator_width1 2
#property  indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


フクロウからのコード

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

すでにいろいろな解決策を試したが、うまくいかない。どこがエラーなのか教えてください。

ファイル:
 

こんにちは。

火曜日の最初のバーの始値を 見つけ、それを固定し、そこから一週間計算できるようにするのを手伝ってください。

ありがとうございます。

 

こんにちは、私はEAがトリガー後に保留中の注文を開くのを止めるために、ここに何を置くべきか誰かが私に教えてくれるとありがたいです。

//+------------------------------------------------------------------+
||著作権 © 2014, Khlystov Vladimir||株式会社日立製作所
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright"Copyright © 2014, cmillion@narod.ru"
#プロパティリンク "http://cmillion.ru"
#プロパティの厳密さ
#property description "エキスパートアドバイザーは、指標を使用せずに市場の高騰を利用して取引します。"
#property description "エキスパートアドバイザーの考え方は、ストップオーダーが現在の価格から与えられた距離で時間的に離散的に移動されることです。"
#property description "価格が一方向に十分に急激に動いた場合、EAには単に注文を動かす時間がなく、成行注文になります。"
#property description "その後、トロールオーダーが発動されます。"
//--------------------------------------------------------------------
extern int Stoploss = 10; // Stoplossは、0であれば、変更されないままです。
Takeprofit = 50; //takeprofitは、もし0であれば、変更されないままです。
extern int TrailingStop = 10; //トランポ長、もし0ならトレーリングストップなし
extern int TrailingStart = 0; //いつトロールを起動するか、例えば利益が40ポイントに達した後。
extern int StepTrall = 2; //トランップステップ - StopLossをStepTrallより近づけずに移動させます。
extern int NoLoss = 0, //指定された利益ポイント数でブレークイーブンに移行、0ならブレークイーブンに移行しない。
MinProfitNoLoss = 0; //ロスレスに移行するための最小限の利益。
extern int Magic = 77; //マジック
extern int Step = 10; //価格からの距離
extern double Lot = 0.1;
extern intern TimeModify = 30; //注文の変更が禁止されるまでの秒数
extern int slippage = 30; //成行注文(買い注文と売り注文)の最大許容価格偏差。
//--------------------------------------------------------------------
datetime TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
ダブルOSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT。
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits)。
OOP = NormalizeDouble(OrderOpenPrice(),Digits)。
SL=OSLです。
if (OT==OP_BUY)
{
b++;
if (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits)。
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits))SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid-OOP)/Point>=TrailingStart)。
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)です。
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
if (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
else Print("買い注文 SLを修正",OSL,"->",SL).Print("買い注文 SLを修正",OSL);
}
}
if (OT==OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits))SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits)です。
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0))SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error ",GetLastError(), "Order Modify Sell SL ",OSL,"->",SL);
else Print("Order Sell Modify SL ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}.
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}.
}
}
}
if (b+TicketB==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent().Of.Lot,NormalizeDouble(Ask+Step * Point),Slippage,SL,TP, "News",マジック,0,CLR_ONE,NO。
}
if (s+TicketS==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0.この場合、Takeprofitは0になります。
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (TicketB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB))/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits)),SL,TP,0,CLR_NONE))。TimeBarB=TimeCurrent()です。
}
}
if (TicketS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall).
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0.この場合、Takeprofitは0になります。
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarS=TimeCurrent()です。
}
}
return(0)です。
}
//--------------------------------------------------------------------

ファイル:
 
yaaarik777:

こんにちは。

火曜日の最初のバーの始値を見つけ、それを固定し、そこから一週間計算できるようにするのを手伝ってください。

ありがとうございます。

if (DayOfWeek() == 1) Price = iOpen(Symbol(),PERIOD_D1, 4);
if (DayOfWeek() >= 2) Price = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

MetaTraderの不具合のようです:手順を入力しようとしたときにハングアップした経験のある方はいらっしゃいますか?

以下は簡単なコードです。

void OnInit()

{

...

Print("アウトサイドプロシージャ");

StartBuy(Price、Take、Stop、Lot)。

...

}

void StartBuy(double Price, double Take, double Stop, double Lot)

{

Print("インサイドプロシージャ");

....

}

1行のOutside procedureが生成され、その後テスターがハングアップしてしまいます。何ですか?

 
A13ksandr:

MetaTraderの不具合のようです:手順を入力しようとしたときにハングアップした経験のある方はいらっしゃいますか?

以下は簡単なコードです。

void OnInit()

{

...

Print("アウトサイドプロシージャ");

StartBuy(Price、Take、Stop、Lot)。

...

}

イナイレの取引はやめろ、そういうことだ。イニテは最速で実行終了する最小限のコードでなければならないと何度言っても、それでも読むのが面倒な人がいるのです。プログラムを実行するための標準的な定義済みの関数があります。

また、initeは入力ではなくintのようなもので、終了理由のreturnがあります、ちなみに、そのような使い方を推奨します。

 
Scarick1:

こんにちは、私はEAがトリガー後に保留中の注文を開くのを止めるために、ここに何を置くべきか誰かが私に教えてくれるとありがたいです。

//+------------------------------------------------------------------+
||著作権 © 2014, Khlystov Vladimir||株式会社日立製作所
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#プロパティリンク "http://cmillion.ru"
#プロパティの厳密さ
#property description "エキスパートアドバイザーは、指標を使用せずに市場の高騰を利用して取引します。"
#property description "エキスパートアドバイザーの考え方は、ストップオーダーが現在の価格から与えられた距離で時間的に離散的に移動されることです。"
#property description "価格が一方向に十分に急激に動いた場合、EAには単に注文を動かす時間がなく、成行注文になります。"
#property description "その後、トロールオーダーが発動されます。"
//--------------------------------------------------------------------
extern int Stoploss = 10; // Stoplossは、0であれば、変更されないままです。
Takeprofit = 50; //takeprofitは、もし0であれば、変更されないままです。
extern int TrailingStop = 10; //トランポ長、もし0ならトレーリングストップなし
extern int TrailingStart = 0; //いつトロールを起動するか、例えば利益が40ポイントに達した後。
extern int StepTrall = 2; //トランップステップ - StopLossをStepTrallより近づけずに移動させます。
extern int NoLoss = 0, //指定された利益ポイント数でブレークイーブンに移行、0ならブレークイーブンに移行しない。
MinProfitNoLoss = 0; //ロスレスに移行するための最小限の利益。
extern int Magic = 77; //マジック
extern int Step = 10; //価格からの距離
extern double Lot = 0.1;
extern intern TimeModify = 30; //注文の変更が禁止されるまでの秒数
extern int slippage = 30; //成行注文(買い注文と売り注文)の最大許容価格偏差。
//--------------------------------------------------------------------

datetime TimeBarB,TimeBarS;

TradingAllowed = true

//--------------------------------------------------------------------
int start()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
ダブルOSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT。
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits)。
OOP = NormalizeDouble(OrderOpenPrice(),Digits)。
SL=OSLです。
if (OT==OP_BUY)

{

b++;

TradingAllowed = false

if (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits)。
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits))SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid-OOP)/Point>=TrailingStart)。
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)です。
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
if (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
else Print("買い注文 SLを修正",OSL,"->",SL).Print("買い注文 SLを修正",OSL);
}
}
if (OT==OP_SELL)
{

s++;

TradingAllowed = false

if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits))SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits)です。
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0))SL = StLo;
}
if ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White))Print("Error ",GetLastError(), "Order Modify Sell SL ",OSL,"->",SL);
else Print("Order Sell Modify SL ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}.
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}.
}
}

}

if (b == 0 && s == 0) TradingAllowed = true;

if (b+TicketB==0&& TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent().Of.Lot,NormalizeDouble(Ask+Step * Point),Slippage,SL,TP, "News",マジック,0,CLR_ONE,NO。
}
if (s+TicketS==0&& TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0.この場合、Takeprofitは0になります。
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
if (TicketB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB))/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits)),SL,TP,0,CLR_NONE))。TimeBarB=TimeCurrent()です。
}
}
if (TicketS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall).
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0.この場合、Takeprofitは0になります。
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE))TimeBarS=TimeCurrent()です。
}
}
return(0)です。
}
//--------------------------------------------------------------------

なんとなく...


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

ごめんなさい!もちろん、すべてはvoid OnTick()の中で行われます。自分で書いておいてなんですが)