[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 88

 

好的。我们不要。我们俩似乎都没有足够的知识。问题的作者问如何改变StopLoss。我不认为他能进入深渊。

尝试在OrderSend 函数之后分配它

 
MaxZ:

OrderSend函数中的数字 "12 "是什么?:(

而且你误解了我对订单的选择......。应该是这样的。

你好!

非常感谢你们的答复!!!!。

我一定没有正确表达:这个想法是这样的。

在1.4545做卖出交易......价格逆势上涨--1.4585......然后--应该在1.4565下挂单

我的代码不能正常工作。

void otlogka (int order)
{  
   int a, k=OrdersTotal();
   for (a=k-1; a>=0; a--){
         if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==OP_BUY){
               if (Bid*Point-OrderOpenPrice()>40)
               RefreshRates();
               if (k>1){
                  {
                     order=OrderSend(Symbol(),OP_SELLLIMIT,0.02,OrderOpenPrice()+20*Point,1,SL,0,"Otlogka",mn,5,0);
                  }}}}}
    
           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

}
 
FOReignEXchange:

我告诉过你,当OrderSend函数运行时,价格可能会改变。所以你必须在事后分配它,这时它已经改变了。

你可以这样做。

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, 0, 0, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         SL = OrderOpenPrice()-StopLoss*Point;
         TP = OrderOpenPrice()+TakeProfit*Point;
         
         Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
         if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
            Alert("Ордер Buy ", Ticket, " модифицирован.");
         else
            Alert("Ошибка: ", GetLastError());
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}
每种方法都有优点和缺点。
 
smartemiy:

你好!

非常感谢你们的答复!!!!。

我一定是念错了:想法是这样的。

在1.4545有一个卖出交易......价格逆势上涨--1.4585......然后--应该在1.4565下一个挂单。

我的代码不能正常工作。

买入和卖出不应该乘以点。它一下子就吸引了我的注意。

应以不同的方式构建条件。

if (Bid-OrderOpenPrice() > 40*Point)
{...}
if (OrderOpenPrice()-Ask > 40*Point)
{...}

我也不清楚你的SL是什么变量?它有什么价值?它是在哪里计算的?

而这

           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

你应该把它放在一个循环中。一个带有订单搜索的循环应该是买入和卖出订单的共同点。

你的编程能力一定很差。我建议你再次重读教科书,看看其中给出的例子,写一个简单的专家顾问,订单计算和交易功能。


还有你的错误:RefreshRates()应该放在你想使用预定义变量 或时间序列数组之前,而不是之后。

 
MaxZ:

买入和卖出不需要乘以点。它立即引起了我的注意...

应以不同的方式构建条件。


你不需要加括号吗?

if ((Bid-OrderOpenPrice()) > 40*Point)
{...}
if ((Ask-OrderOpenPrice()) < 40*Point)
 
MaxZ:

买入和卖出不需要乘以点。它立即引起了我的注意...

应以不同的方式构建条件。

我也不确定你的SL是什么变量?它有什么价值?它是在哪里计算的?

而这

你必须把它放入一个循环中...

你的编程能力真的很差...我建议你再次重读该教程,看看编写简单的专家顾问、计算订单和交易功能的例子。

这就是正常的止损=SL
 
FOReignEXchange:


你不需要加括号吗?

不一定。没有托架也能用!:)

这取决于你如何喜欢它。手写的!:D

 
smartemiy:
这是一个常规的止损=SL。
它是如何计算的?而为什么 "买 "和 "卖 "很常见?

smartemiy:

在1.4545有一个卖出交易......价格与趋势相反 - 1.4585......然后 - 应该在1.4565放置一个挂单。

顺便说一下,如果是逆势,条件应该是负面的。

if (Bid-OrderOpenPrice() < -40*Point)
{...}
if (OrderOpenPrice()-Ask < -40*Point)
{...}

通常从表达方式来看

 ProfitBUY  = Bid-OrderOpenPrice();
ProfitSELL = OrderOpenPrice()-Ask;

我们可以找到相应交易的利润,单位是点。如果利润为负数,就已经是损失了。这里我们检查一下,如果损失超过40点,我们需要下一个挂单

 
MaxZ:
它是如何计算的?而为什么 "买 "和 "卖 "很常见?

止损 并不那么重要,现在...

理论上来说,这个代码在你的调整下,会不会起作用?

 
smartemiy:

止损并不那么重要,现在...

理论上来说,这个代码能不能用?

它可能起作用,但它能正确地工作吗?

同样,从你的问题来看。

聪明米

"在1.4545进行卖出交易......价格逆势上涨--1.4585......然后--应该在1.4565下挂单。"

一个卖出订单已被打开。OrderOpenPrice()将返回1.4545。

价格逆势而行。问价=1.4585。状况。

if (OrderOpenPrice()-Ask <= -40*Point)

将工作(放一个"<="符号)。

让我们分析一下以下代码。

order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);

在1.4545-20*Point=1.4525的价格上设置了一个待定的 BUYLIMIT订单。它必须是1.4565。


但在你这样做之前,试着重写整个代码。有很多错误,有些片段看起来好像你不明白自己在写什么。