请指导我有关传播的问题 - 页 2

 
GumRai:

我想,你可以用20或30美元的价格把它编码。

好的......谢谢......让我先看看能不能找到免费的东西,如果找不到,我就发布一个工作。
 
GumRai:

我认为你可以用20或30美元的价格来编写这个代码。

事实上,你已经确认了订单关闭时已经考虑了点差,我认为上述脚本应该对我有用......谢谢......我所要设置的是10个点......它将按照你说的自动关闭,如果是空头就使用ASK值,如果是多头就使用BID值,并将其总和作为账户总利润,关闭所有未结订单。在上面的程序中,它说滑点=5 ......对这个脚本是什么意思? 当脚本关闭一个订单 时,它将如何发挥作用? 哦,还有,它是一个脚本还是EA? [你们是怎么学到这么多东西的 >.< ] 。
 
tatyawinchu:

非常感谢......非常清楚,非常有用......我想知道发布这样一份工作需要多少钱?你认为这样的代码有多难?我从网上得到的代码,我已经张贴在上面,看起来很大......我的意思是我真的不能掏出成千上万美元......。


又见面了。

不用担心,你想要的代码不应该那么复杂,而且,你要知道,如果你需要发布一个工作,你是一个控制者,你提供你能负担得起的和你认为值得的东西!

另一方面,如果你像我一样,我会先尝试免费的选择。没有什么损失,也许会得到一些朋友,并在这个过程中学习一些东西。

干杯

 
tatyawinchu:

事实上,现在你已经确认了订单关闭已经考虑到了点差,我想上面的脚本应该对我有用......谢谢......我所要设置的是10个点......它将按照你说的自动关闭,如果是空头就使用ASK值,如果是多头就使用BID值,并将其总和作为账户总利润,关闭所有未结订单。在上面的程序中,它说滑点=5 ......对这个脚本是什么意思? 当脚本关闭一个订单时,它将如何发挥作用? 哦,还有,它是一个脚本还是EA? [你们是怎么学到这么多东西的 >.< ] 。


再次问好。

一如既往,有一个好消息和一个坏消息。想先听坏消息还是好消息?

如果我解释得不够清楚,请告诉我:对于EA来说,要根据账户利润退出交易,它需要知道交易前的账户资产 是多少,以便有一个起点。这有什么意义吗?

如果你没有一个起点来比较,或者没有比较,只要你的账户利润是负的,EA就不会关闭你的交易,或者如果你的账户利润是正的,并且超过100或任何限制,EA就会立即关闭所有的交易。

这有什么意义吗?

滑点是指如果您以市场价格开仓或平仓,您允许经纪人在不重新报价的情况下下达或关闭订单的最大偏差量。由于买入价和卖出价不断变化,当您的订单到达服务器时,如果价格值(买入价或卖出价)在滑点限制之内,该订单将被处理,否则将被重新报价。

是的,你的代码是一个EA。脚本通常只运行一次,你得到一个新的刻度,执行代码并退出。只要你让它运行,EA就会持续运行。

你是如何区分它们的?有时这很难,因为它们的工作方式相似。当一个新的脚本被创建时,看起来像这样。

//+------------------------------------------------------------------+
//|                                                   TestScript.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   
  }
//+------------------------------------------------------------------+

你可以看到它只有OnStart功能,并写着:脚本程序启动功能。

回到你的问题上,如果你运行一个EA,在没有下单的情况下检查账户资产,并将其作为一个参考点,那么当达到每个账户所需的利润时,它可以关闭所有订单。

一个点的价值(每点货币)对所有货币来说都是不一样的。澳元兑美元对的一个点与英镑兑日元对的价值不一样。

你是在为这个EA寻找特定的符号,还是不管什么符号,只要在达到每个账户的利润时关闭所有订单?

另外,止损应该是与账户资产相关还是与订单/交易相关?

我知道这听起来很复杂,但其实并没有那么复杂。我们的电脑太笨了,除非你确切地说明你想要什么,否则他们就会迷失。

这对你有什么帮助吗?希望它是。

欢呼声

 

瑟德尔

我很确定,AccountProfit()返回当前未平仓交易的总利润。不过从文件中看不出来。

 
GumRai:

瑟德尔

我很确定,AccountProfit()返回当前未平仓交易的总利润。不过从文档中看不出来。


嗯......。

 AccountProfit() 

相反,我使用...

double AccProfits=AccProfits+OrderProfit();

取决于你想达到什么目的。

 
GumRai:

瑟德尔

我很确定,AccountProfit()返回当前未平仓交易的总利润。不过从文档中看不出来。


嗨,GumRai

你是对的,从文档中看不是很明显,但我测试了一下,同样,你是对的,它是所有未结订单的利润/亏损之和。

很好的发现。谢谢。

如果只想管理手动开仓的订单,需要从其他EA可能下的订单中选择,仍然不能使用账户利润。

我想通过神奇的数字=0来选择应该是可以的。然后按照deysmacro 的建议将利润汇总。

我想我是这样认为的。你们有什么看法?

//+------------------------------------------------------------------+
//|                                       CloseOrdersOnProfit_v1.mq4 |
//|                             Copyright 2014, 3D@tm Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, 3D@tm Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//---
#include <stdlib.mqh>
//---
#define  RETRYCOUNT    10
#define  RETRYDELAY    500
#define  LONG          1
#define  SHORT         -1
#define  ALL           0
//---
extern int     Slippage=3;
input  double  ProfitTarget=100.0;
input  double  StopLossLimit=50.0;
input  bool    WriteScreenshots=true;
//---
double StartEquity=0;
int    myOrders;
//===================================================================
/*
This EA will manage manually placed orders and skip the orders that
have a magic number different from zero.
If the Profit target - the sum of profit/loss on all orders (except
orders placed by other EA's ) is reached, all those orders are
closed.
If the maximum amount of money allowed for a loss is reached, EA
will close all those orders and an alert will pop up.
*/
//===================================================================
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==3 || Digits==5) Slippage*=10;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- count orders manually placed (no magic number)
   CountMyOrders();
//--- reset account equity / take a reference point
   if(myOrders<1)
     {
      StartEquity=AccountEquity();
      //--- no orders detected, wait for orders to be placed
      return;
     }
//--- calculate profit
   double myProfit=CalculateProfit();
//--- if profit target reached, exit all
   if(myProfit>=ProfitTarget)
     {
      ExitAll(ALL);
      Alert("Orders closed due to profit target reached");
     }
//--- exit if stop limit reached
   if(StartEquity-AccountEquity()>=StopLossLimit)
     {
      ExitAll(ALL);
      Alert("Orders closed due to stop loss limit reached");
     }

   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         myOrders++;
        }
     }
   return(myOrders);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CalculateProfit()
  {
   double Profit=0;
   for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      if(OrderType()==OP_BUY || OrderType()==OP_SELL)
        {
         Profit=Profit+OrderProfit();
        }
     }
   return(Profit);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ExitAll(int direction)
  {

   string total=IntegerToString(OrdersTotal(),0,0);

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      Comment(StringConcatenate("Closing trade #",(i+1)));
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         Print("Failed to select order, error : "+ErrorDescription(GetLastError()));
      //skip orders placed by other EA's
      if(OrderMagicNumber()>0)continue;
      //---
      if(OrderType()==OP_BUY &&(direction==LONG ||  direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),LONG,OrderLots(),Blue); }
      if(OrderType()==OP_SELL &&(direction==SHORT|| direction==ALL)) { Exit(OrderSymbol(),OrderTicket(),SHORT,OrderLots(),Red); }
     }
   Comment(StringConcatenate(total," trades closed."));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Exit(string symb ,int ticket,int dir,double volume,color clr,int t=0)
  {
   int i=0,j=0,cmd=0;
   double prc=0,sl=0,tp=0,lots=0;
   string cmt;
   double bid=MarketInfo(symb,MODE_BID);
   double ask=MarketInfo(symb,MODE_ASK);
   bool closed;

   Print("Exit("+IntegerToString(dir,0,0)+","+DoubleToStr(volume,3)+","+IntegerToString(t,0,0)+")");

   for(i=0; i<RETRYCOUNT; i++) 
     {
      for(j=0;(j<50) && IsTradeContextBusy(); j++)
         Sleep(100);
      RefreshRates();

      if(dir==LONG) 
        {
         prc=bid;
        }
      if(dir==SHORT) 
        {
         prc=ask;
        }
      Print("Exit: prc="+DoubleToStr(prc,Digits));

      closed=OrderClose(ticket,volume,prc,Slippage,clr);
      if(closed)
        {
         Print("Trade closed");
         Screenshot("Exit");

         return (true);
        }

      Print("Exit: error \'"+ErrorDescription(GetLastError())+"\' when exiting with "+DoubleToStr(volume,3)+" @"+DoubleToStr(prc,Digits));
      Sleep(RETRYDELAY);
     }

   Print("Exit: can\'t enter after "+IntegerToString(RETRYCOUNT,0,0)+" retries");
   return (false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Screenshot(string moment_name)
  {
   if(WriteScreenshots)
      WindowScreenShot(WindowExpertName()+"_"+Symbol()+"_M"+IntegerToString(Period(),0,0)+"_"+
                       IntegerToString(Year(),0,0)+"-"+two_digits(Month())+"-"+two_digits(Day())+"_"+
                       two_digits(Hour())+"-"+two_digits(Minute())+"-"+two_digits(Seconds())+"_"+
                       moment_name+".gif",1024,768);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string two_digits(int i)
  {
   if(i<10)
      return ("0"+IntegerToString(i,0,0));
   else
      return (""+IntegerToString(i,0,0));
  }
//+------------------------------------------------------------------+
 
thrdel:


嗨,GumRai

你是对的,从文件中看不是很明显,但我测试了一下,同样,你是对的,它是所有开仓订单的盈亏之和。

接得好。谢谢。

如果只想管理手动开仓的订单,需要从其他EA可能下的订单中选择,仍然不能使用账户利润。

我想通过神奇的数字=0来选择应该是可以的。然后按照deysmacro 的建议将利润汇总。

我想我是这样认为的。你们有什么看法?


这失败了 .....

对于大量的交易来说,PRC不是一个合适的价格。

也不要做

  if(Digits==3 || Digits==5) Slippage*=10;

如果你多次改变你的时间框架 ......

 
deVries:


这失败.....

对于很多交易来说,PRC并不是一个合适的价格。

也不要做

如果你多次改变你的时间框架 ......


是的,deVries

一切都失败了,如果你这么说,我不应该这么做,但由于我真的没有在你的回答中看到什么帮助.....

你应该明白,这些代码并不是用于出售给挑剔的客户的商业性EA,对吗? 我们正在努力解决一些问题,如果你不想帮忙,至少应该不去管它。

你真的认为,如果我改变几次时间框架.....,什么?滑点会是3000000?在我的MT4中显然不会。如果你不相信我,可以自己做个测试。

我的测试表明,当你改变时间框架时,EA会经历脱机/启动周期,由于提到的代码在OnInit中,滑点每次都会在30点左右。

任何人都可以看到,改变时间框架不会使滑点达到一百万,如果这是你所建议的。

不,这不是一张假照片,它是真实的,你可以检查改变每个时间框架的时间。

希望能有所帮助。

 
thrdel:


又见面了。

一如既往,有一个好消息和一个坏消息。想先听坏消息还是好消息?

如果我解释得不够清楚,请告诉我:对于EA来说,要根据账户利润退出交易,它需要知道交易前的账户资产是多少,以便有一个起点。这有什么意义吗?

如果你没有一个起点来比较,或者没有比较,只要你的账户利润是负的,EA就不会关闭你的交易,或者如果你的账户利润是正的,并且超过100或任何限制,EA就会立即关闭所有的交易。

这有什么意义吗?

滑点是指如果您以市场价格开仓或平仓,您允许经纪人在不重新报价的情况下下达或关闭订单的最大偏差量。由于买入价和卖出价不断变化,当您的订单到达服务器时,如果价格值(买入价或卖出价)在滑点限制之内,该订单将被处理,否则将被重新报价。

是的,你的代码是一个EA。脚本通常只运行一次,你得到一个新的刻度,执行代码并退出。只要你让它运行,EA就会持续运行。

你是如何区分它们的?有时这很难,因为它们的工作方式相似。当一个新的脚本被创建时,看起来像这样。

你可以看到它只有OnStart功能,并写着:脚本程序启动功能。

回到你的问题上,如果你运行一个EA,在没有下单的情况下检查账户资产,并将其作为一个参考点,那么当达到每个账户所需的利润时,它可以关闭所有订单。

一个点的价值(每点货币)对所有货币来说都是不一样的。澳元兑美元对的一个点与英镑兑日元对的价值不一样。

你是在为这个EA寻找特定的符号,还是不管什么符号,只要在达到每个账户的利润时关闭所有订单?

另外,止损应该是与账户资产相关还是与订单/交易相关?

我知道这听起来很复杂,但其实并没有那么复杂。我们的电脑太笨了,除非你确切地说明你想要什么,否则他们就会迷失。

这对你有什么帮助吗?希望它是。

欢呼声


thrdel:


又见面了。

像往常一样,有一个好消息和一个坏消息。你想先听坏消息还是先听好消息?

如果我解释得不够清楚,请告诉我:对于一个EA来说,要根据账户利润退出交易,它需要知道在交易之前账户资产是多少,以便有一个起点。这有什么意义吗?

如果你没有一个起点来比较,或者没有比较,只要你的账户利润是负的,EA就不会关闭你的交易,或者如果你的账户利润是正的,并且超过100或任何限制,EA就会立即关闭所有的交易。

这有什么意义吗?

滑点是指如果您以市场价格开仓或平仓,您允许经纪人在不重新报价的情况下下达或关闭订单的最大偏差量。由于买入价和卖出价不断变化,当您的订单到达服务器时,如果价格值(买入价或卖出价)在滑点限制之内,该订单将被处理,否则将被重新报价。

是的,你的代码是一个EA。脚本通常只运行一次,你得到一个新的刻度,执行代码并退出。只要你让它运行,EA就会持续运行。

你是如何区分它们的?有时这很难,因为它们的工作方式相似。当一个新的脚本被创建时,看起来像这样。

你可以看到它只有OnStart功能,并写着:脚本程序启动功能。

回到你的问题上,如果你运行一个EA,在没有下单的情况下检查账户资产,并将其作为一个参考点,那么当达到每个账户所需的利润时,它可以关闭所有订单。

一个点的价值(每点货币)对所有货币来说都是不一样的。澳元兑美元对的一个点与英镑兑日元对的价值不一样。

你是在为这个EA寻找特定的符号,还是不管什么符号,只要在达到每个账户的利润时关闭所有订单?

另外,止损应该是与账户资产相关还是与订单/交易相关?

我知道这听起来很复杂,但其实并没有那么复杂。我们的电脑太笨了,除非你确切地说明你想要什么,否则他们就会迷失。

这对你有什么帮助吗?希望它是。

欢呼声

再次感谢您

谢谢你非常清楚的回答......也谢谢你的帮助。现在我明白了你教的很多东西。

"你是在为这个EA寻找特定的符号,还是不管什么符号,只要在达到每个账户的利润时关闭所有的订单就可以了?" = 后半部分有一些条件是要求的

"当每个账户的利润达到时,只需关闭所有的订单"

好吧,我一次只交易2个货币对......首先我在一个货币对上开了一个订单......如果它对我不利,我就用另一个货币对的订单来对冲它......。

我正在寻找能做以下事情的EA。

1) 如果没有订单或只有一个订单,不做任何事情

2) 只有在有两个订单运行的情况下,它才应该关闭X利润,否则转到1)

3) 当关闭X时,它应该考虑支付的点差,并将X视为净利润[ 这在上面已经解释过了,AccountProfit()直接否定了你必须支付的点差,并显示你的净利润而不是毛利润。]

4) 正如你所看到的,SL和TP并不重要,我不使用这些,所以在EA中不需要。

现在,我完全同意你的观点,虽然我不懂编码,但我认为我需要的东西有一半以上已经在上面的EA中存在了......我只是需要找到一些东西来改变它只有在两个订单打开时才做的事情......我认为它必须与那里的FOR循环有关......或类似的东西......[ 好吧,现在我很嫉妒你们能阅读代码而我不能!...现在我觉得自己就像一个来自20世纪的哑巴!啊哈哈,在21世纪,每个人都必须知道编码 >.< ] 。

我对我的需求做了一个快速的思维流程图

EA开始 ---> 什么都不做,直到有0个或1个订单 ----> 当第二个订单被触发时,发出 "看涨开盘的声音" ----> 在X量的纯利润下关闭两个订单[在考虑点差后] 并发出 "看涨平仓的声音" ]

当然,看涨开盘和看涨收盘的声音文件可以是任何小的波形文件......在MT4上很容易找到。我认为这些东西可以通过改变一些东西在我发布的上述EA中实现!嘿嘿,帮帮我吧=D