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

 
tol64:
ストップロスやステークプロフィットの 設定について、ポジションオープン時やペンディングオーダーの設定 時に即座に、あるいはその後、プログラム上で決定することが可能かどうか、アドバイスをお願いします。


ストップとプロフィットレベルを事前に確認する。

MarketInfo() 関数で使用される要求識別子です。以下の値のいずれかを指定することができる。

定数. 価値 商品説明
MODE_LOW 1 1日の最低価格
MODE_HIGH 2 1日の最高価格
MODE_TIME 5 最終見積もり時刻
MODE_BID 9 最後に受け取った入札価格。現在の機器では、定義済みの変数Bidに 格納されます。
MODE_ASK 10 最後に受け取った入札価格。定義済み変数に格納 現在のシンボルに対するアスク
MODE_POINT 11 引用通貨でのポイントサイズ。定義済み変数に格納 現在のシンボルに対するポイント
MODE_DIGITS 12 商品価格の小数点以下の桁数。定義済み変数に格納される 現在のシンボルの桁数
MODE_SPREAD 13 スプレッド(pips
MODE_STOPLEVEL 14 ストップロス/ステイクプロフィットの最小許容レベル(pips単位
MODE_LOTSIZE 15 商品の基準通貨での契約サイズ
MODE_TICKVALUE 16 預入通貨における商品価格の最小変化量
MODE_TICKSIZE 17 気配値通貨での商品価格変化の最小ステップ
MODE_SWAPLONG 18 ロングポジションのスワップサイズ
MODE_SWAPSHORT 19 ショートポジションのスワップサイズ
MODE_STARTING 20 カレンダー開始日(通常、先物に使用される)
モードエクスパイア 21 有効期限(通常、先物に使用される)
モードトレードアロード 22 指定された商品の取引許可
MODE_MINLOT 23 最低敷地面積
MODE_LOTSTEP 24 敷地面積の変更ステップ
MODE_MAXLOT 25 最大敷地面積
MODE_SWAPTYPE 26 スワップ算出方法。0 - ポイント、1 - 測定器基準通貨、2 - パーセント、3 - 証拠金通貨で表示されます。
モードプロフィカルモード 27 利益計算の方法。0 - FX、1 - CFD、2 - 先物。
mode_margincalcmode 28 マージンの計算方法。0 - FX、1 - CFD、2 - 先物、3 - インデックスCFD
モードマージニット 29 1ロットあたりの必要証拠金
モードマージンメンテナンス 30 1ロットあたりの未決済ポジションを支える必要証拠金の額
モードマージンヘッジ 31 オーバーラップしたポジションにかかるマージン(1ロットあたり
モードマージン必須 32 1ロットの買い付けに必要な資金量。
モードフリーズレベル 33 ポイントでの注文の凍結のレベル。執行価格が凍結水準で定義された制限内にある場合、注文の変更、取消し、または決済は行えません。

 
SeALALex:

私はEAの書き方を学んでいるところです、標準的な指標での最初のEAの多くと同様に、私はちょうど新しいものを書きました、しかし今私は私のタスクを複雑にしています。一般的に、どのように作るか、その条件の出現で位置を開き、その閉鎖で、新しいものが開いていない保存するときに同じ条件を取ろう、とだけ開いたときに反対の条件、等。ありがとうございます!!!


ヘルプにサンプルがあります。

int i,accTotal=OrdersHistoryTotal(); for(i=0;i<accTotal;i++) { //---- 選択結果をチェック if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error accessing historical database (",GetLastError(),")); break;
       } 注文の終了時刻を記憶する必要がある。注文の終了時刻と前回の反復の終了時刻を比較し、(終了時刻の方が高く、取引操作タイプが「買い」か「売り」)であれば、現在の注文の時刻と取引操作タイプを記憶すべきである // 結果として、サイクルの終わりに、最後に終了した注文タイプが分かる } このようなものだ .

 
ivandurak:


ストップ&プロフィットセッティングレベルの事前確認 .


アカウントタイプによっては、このリストにチェックが入っていません。以下は、NDD口座の取引業務 規程の一節です。

3.3 Expert Advisor を使用してクライアントターミナルからポジションを建てる場合、お客様はストップロスおよび/またはテイクプロフィットオーダーを指定することはできません。顧客がこれらの注文を行うことを希望する場合、顧客は条項 5.16 - 5.22 及び 9.13 - 9.16 に従って既存のポジションを修正することによって行うことができます。

これをプログラムで確認することはできないかと考えています。私の理解では、ノーです。ブローカーが設定した条件を考慮し、ポジションを開く/保留中の注文を設定する関数を、最初にプログラムに書き込む必要があります。
 
tol64:


アカウントタイプによっては、このリストにチェックが入っていません。以下は、NDD口座の取引業務規程の一節です。

プログラム的に確認できるのか、興味があります。私の理解では、ノーです。本来は、ブローカーが設定した条件を考慮して、ポジションを開く/保留注文を設定する関数をプログラムに書き込む必要があります。

注文の設定のルールがよくわからない、デモで遊んでみて、できることとできないことを確認する。私の知る限り、プログラムで注文を設定し、それを修正することを妨げるものは何もありません。
 
tol64:


アカウントタイプによっては、このリストにチェックが入っていません。以下は、NDD口座の取引業務規程の一節です。

プログラム的に確認できるのか、興味があります。私の理解では、ノーです。ブローカーが設定した条件を考慮して、ポジションをオープンしたり、保留注文を設定する関数を、最初にプログラムに書き込む必要があります。

全く問題ありません。でも(あなたがそれを使用するためにどのアカウント(取引条件と誰と)知っているので、個人的な使用のためではない場合)が、あなたが注文するEAを送信し、クライアントはまだそれが使用されるどのようなアカウントとどこに決定されていない場合、でもすぐにテイクして停止する可能性とアカウントの種類で、その後デフォルトでは、すべてのタイプの命令を設定すると、これらのレベルのゼロ値でEAを生成する彼らの修正(そこに、そこに動作します)、もちろん、誰もpで チェック要件や制限を キャンセルしていないが、
 
ivandurak:

注文の設定のルールがよくわからないので、デモで遊んでみて、できること、できないことを確認する。私の知る限り、プログラムで注文を設定し、それを修正することを妨げるものは何もありません。

)))いいえ、あなたは完全に誤解しています。プログラムで設定する」ではなく、「プログラムで定義する」と書きました。口座の種類によっては、すぐに ポジションを建てて ストップ/ストップを設定することができないので、私にとっては好ましい/安全なことだと思います。mql5では、私の記憶違いでなければ、判定可能なようです。これを判断して、定義によって、どの機能を使うかを選択できるようにしたい。
 
Roman.:

全く問題ありません。でも(あなたがそれを使用するためにどのアカウント(取引条件と誰と)知っているので、個人的な使用のためではない場合)、しかし、あなたが注文するEAを作り、クライアントはまだどのようなアカウントで、彼はそれを使用する場所を決定していない場合、でもすぐに取る設定する可能性とアカウントの種類に停止すると、あなたはまだデフォルトでこれらのレベルのゼロ値とのEAを作って、注文のすべての種類の設定時に、彼らの変更(そこに、そこに動作します)、もちろん、誰もpで チェック要件や制限を キャンセルしながら、。

そう、解決策があれば問題はないのです。持っているものを正しく使えばいいのです(笑)。
 

Roman. さん ivandurak さん、ご返答ありがとうございます、しかし、私にはまだ理解するのが難しいです。 他のフォーラムでこれを行う方法の提案を見つけましたが、今のところ、私のいつものコードに適用できません

int BuyTrue, SellTrue;// これらのフラグとして機能する変数を定義します。
....
//--- 購入条件
if (BuyTrue==0 && ... +他の条件) //オープンポジションの条件
{
....
OrderSend(......); //注文を出すための関数
BuyTrue=1; // BuyTrue=1の場合、ポジションオープンの条件は完全には満たされない。
// その結果、買いシグナルが繰り返されると、ポジションはオープンされません。
SellTrue=0; // SellTrue=0でポジションオープンの条件が完全に満たされます。
// したがって、次の取引は売りのみとなります。
....
}

//--- 売りの条件
if (SellTrue==0 && ... +他の条件) //オープンポジションの条件
{
....
OrderSend(......); //注文を出すための関数
SellTrue=1; // SellTrue=1の場合、注文開始の条件は完全には満たされません。
// したがって、2回目の売りシグナルでは、ポジションはオープンされません。
BuyTrue=0; // BuyTrue=0でポジションオープンの条件が完全に満たされます。
// その結果、次の取引は「買い」のみとなる
....
}

ポジションを開くための私のコード

total=OrdersTotal()。
if(total<1)
{
// 未決済の注文を確認しない
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money.フリーマージン = ", AccountFreeMargin();
return(0)です。
}
// ロングポジション(買い)のチェック
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,「macd sample」,16384,0,Green)。
if(チケット>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());
}
else Print("買い注文の開始エラー:",GetLastError()).Print("Error opening BUY order : ");
return(0)です。
}
// ショートポジションのチェック(売り)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) とする。
if(チケット>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("SELL order opened : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
return(0)です。
}
return(0)です。
}

 
SeALALex:

Roman. さん ivandurak さん、返信をありがとうございました。 私はこれを行う方法について別のフォーラムで提案を見つけましたが、今のところ私のいつものコードに適用することはできません

int BuyTrue, SellTrue;// 上記のフラグとなる変数を定義します。
....
//--- 購入条件
if (BuyTrue==0 && ... +他の条件) //オープンポジションの条件
{
....
OrderSend(......); //注文を出すための関数
BuyTrue=1; // BuyTrue=1の場合、ポジションオープンの条件は完全に満たされない。
// その結果、買いシグナルが繰り返されると、ポジションはオープンされません。
SellTrue=0; // SellTrue=0でポジションオープンの条件が完全に満たされます。
// したがって、次の取引は売りのみとなります。
....
}

//--- 売りの条件
if (SellTrue==0 && ... +他の条件) //オープンポジションの条件
{
....
OrderSend(......); //注文を出すための関数
SellTrue=1; // SellTrue=1の場合、注文開始の条件は完全には満たされません。
// したがって、2回目の売りシグナルでは、ポジションはオープンされません。
BuyTrue=0; // BuyTrue=0でポジションオープンの条件が完全に満たされます。
// その結果、次の取引は「買い」のみとなる
....
}

取引を開始するための私のコード。

total=OrdersTotal()。
if(total<1)
{
// 未決済の注文を確認しない
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money.フリーマージン = ", AccountFreeMargin();
return(0)です。
}
// ロングポジション(買い)のチェック
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,「macd sample」,16384,0,Green)。
if(チケット>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("BUY order opened : ",OrderOpenPrice());
}
else Print("買い注文の開始エラー:",GetLastError()).Print("Error opening BUY order : ");
return(0)です。
}
// ショートポジションのチェック(売り)
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) とする。
if(チケット>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print("SELL order opened : ",OrderOpenPrice())
}
else Print("Error opening SELL order : ",GetLastError());
return(0)です。
}
return(0)です。
}


まず、Ctrl+Alt+M(またはメニューの一番上にあるSRCを押す)でエディタにコードを貼り付けます。そうしないと、悪いことに、何が明確なのか - すべてが一つの下でブレンドされます...:-))。

第二に、チュートリアルを読んで、特に私が推奨するリンク上の情報は、コードの下に、その説明であり、説明の最後に正確に記述されている -一度 MAの上/下の価格を報告する方法(あなたは与えられた取引条件での単一のエントリとの アナロジーを持っているでしょう - フラグの使用とすべて)、あなたのウィザードを作業する前...:-))))。

追伸:またはgoogle検索:正しいコードの挿入方法 site:mql4.com

 






if (SellTrue==0 && A1<A2 && S1<30 && ADX1<ADX2) // Условие открытия позы
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"AO sample",16384,0,Red);
           if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ||SellTrue==1)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
        
        if (ticket > 0 && SellTrue==1)   
     {
      SellTrue=1;
      BuyTrue=0;                 
      Alert("По данным условиям сделка уже открывалась"); // Сообщение 
     }
        }
      return(0);
ローマン うまくいきません、どうしたのでしょうか?